Naps: Problem mit Summe und Union

Hi,

nehmen wir an ich habe folgenden Abfrage:

Select zahl1, NULL as Zahl 2, NULL as Zahl3 FROM Datenbank1  
  
UNION  
  
SELECT NULL as Zahl1, Zahl2, NULL as Zahl3 FROM Datenbank2  
  
UNION  
  
SELECT NULL as Zahl1, NULL as Zahl2, Zahl3 FROM Datenbank3

Wie könnte ich die Summe von Zahl1, Zahl2 und Zahl3 der o.g. Abfrage in der selben Abfrage ausgeben?

Zahl1 + Zahl2 + Zahl3 geht ja natürlich nicht...

MfG Naps

  1. Tach!

    Wie könnte ich die Summe von Zahl1, Zahl2 und Zahl3 der o.g. Abfrage in der selben Abfrage ausgeben?
    Zahl1 + Zahl2 + Zahl3 geht ja natürlich nicht...

    Für eine UNION-Abfrage gibt es keine Summenbildung. Und dann gäbe es da auch noch das Problem, dass da NULL-Werte drin sind. Das führt üblicherweise dazu, dass das Ergebnis immer NULL ist.

    Ich würde ja statt UNION ein SELECT ohne FROM nehmen und die Fragen nach den Einzelwerten als Subquerys formulieren. Die nächste Idee wäre gewesen, diese Ergebnisse benutzerdefinierten Variablen zuzuweisen und diese dann zu addieren. Dummerweise geht das zwar syntaktisch, aber MySQL garantiert nicht, in welcher Reihenfolge innerhalb eines Statements die Ausdrücke evaluiert werden (siehe verlinkte Seite).

    SELECT @z1 := (SELECT ...), @z2 := (SELECT ...), ..., @z1 + @z2 + @z3;

    Vielleicht geht das ja mit den Uservariablen und dem UNION irgendwie, aber das kannst du testen, wenn du willst.

    dedlfix.

  2. Hi,

    Wie könnte ich die Summe von Zahl1, Zahl2 und Zahl3 der o.g. Abfrage in der selben Abfrage ausgeben?

    Zahl1 + Zahl2 + Zahl3 geht ja natürlich nicht...

    Ich kann nur raten, ob du vielleicht sowas meinst:

    SELECT (  
      ( SELECT SUM(zahl1) FROM tabelle1 )  
      +  
      ( SELECT SUM(zahl2) FROM tabelle2 )  
      +  
      ( SELECT SUM(zahl3) FROM tabelle3 )  
    ) AS gesamtsumme
    

    Statt DatenbankX meinst du wohl TabelleX, nehme ich an; und des weiteren, dass du wohl die Zahlen aller Datensätze in der jeweiligen Tabelle aufsummieren willst …?

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    1. Hi,

      Wie könnte ich die Summe von Zahl1, Zahl2 und Zahl3 der o.g. Abfrage in der selben Abfrage ausgeben?

      Zahl1 + Zahl2 + Zahl3 geht ja natürlich nicht...

      Ich kann nur raten, ob du vielleicht sowas meinst:

      SELECT (

      ( SELECT SUM(zahl1) FROM tabelle1 )
        +
        ( SELECT SUM(zahl2) FROM tabelle2 )
        +
        ( SELECT SUM(zahl3) FROM tabelle3 )
      ) AS gesamtsumme

      
      >   
      > Statt DatenbankX meinst du wohl TabelleX, nehme ich an; und des weiteren, dass du wohl die Zahlen aller Datensätze in der jeweiligen Tabelle aufsummieren willst …?  
        
      Ja tabellX.  
      Nein, eigentlich so wie es dedlfix schon geschrieben.  
        
      Das Problem bei seiner Lösung ist, dass ich einen "Subquery returns more than 1 row" Fehler zurückbekomme.  
        
        
      Noch mal kurz zu dem was ich erreichen möchte:  
        
      Zahl1 | Zahl2 | Zahl3 | total  
        1      4       3        8  
        2      2       1        5  
        3      2       1        6  
        
        
      MfG Naps
      
      1. Tach!

        Nein, eigentlich so wie es dedlfix schon geschrieben.
        Das Problem bei seiner Lösung ist, dass ich einen "Subquery returns more than 1 row" Fehler zurückbekomme.

        Nein, das ist ein Problem deiner Umsetzung. Ich schrieb Einzelwerte. Wenn du stattdessen a,null,null und null,b,null und null,null,c zurückgibst, dann sind das keine Einzelwerte, die nulls sinnlos und die Fehlermeldung verständlich. An Stellen, an denen nur ein einzelner Wert stehen darf und keine Ergebnismenge, darf eine Subquery auch nur einen einzelnen Wert zurückliefern.

        Noch mal kurz zu dem was ich erreichen möchte:

        Zahl1 | Zahl2 | Zahl3 | total
          1      4       3        8
          2      2       1        5
          3      2       1        6

        Aus welcher Datengrundlage? Du darfst deine Beispiele auch nur soweit abkürzen und anonymisieren, dass sie weiterhin das eigentliche Problem auf realistische Weise widerspiegeln.

        dedlfix.