MySQL SUM() Problem

pipip

Mitglied
SQL:
SELECT t.id, SUM(t1.zahl) AS summe, COUNT(t1.id) AS count1, COUNT(t2.id) AS count2
FROM test AS t
LEFT JOIN test1 AS t1 ON t1.id=t.id AND t1.status=1
LEFT JOIN test1 AS t2 ON t2.id=t.id AND t2.status=0
GROUP BY t.id

Ich möchte aus der Tabelle test1 alle Werte einer Spalte (zahl) die den status= 1 haben addieren. Zusätzlich möchte ich jeweils die Anzahl der Einträge mit dem status=1 und status=2 haben.

Mit meiner Aabfrage oben wird leider die Summe nicht so berechnet wie ich mir das vorstelle. Er scheint die Summe doppelt zu bilden (Ergebnis ist immer doppelt so groß wie es sein "müsste"). Ich hoffe mein Problem ist trotz der kurzen Beschreibung verständlich :D
 
Moin pipip,

ginge es nicht stressärmer so?
Code:
      SELECT t.id, 
      SUM(t.zahl) AS summe, 
      COUNT(case t.Status
         when 1 Then 1 Else=0 END) as count1,
      COUNT(case Status
         when 0 Then 1 Else=0 END) as count2
      from test t
group by t.id;

Grüße
Biber
 
Zuletzt bearbeitet:
Vielen Dank für Antwort!

Es befindet sich nicht alles in einer Tabelle (test und test1) ... ein Join muss also leider sein. Mal gucken ob das mit den case Bedingungen mit Joins funktionert.

/edit
ne, funktioniert leider nicht bzw es kommt nicht das gewünschte Ergebnis raus :D
 
Zuletzt bearbeitet:
Moin pipip,

sorry, dass es zwei Tabellen sind hatte ich überlesen. Dennoch:
Code:
      SELECT t.id, 
      SUM(t.zahl) AS summe, 
      COUNT(case t1.Status
         when 1 Then 1 Else=0 END) as count1,
      COUNT(case t1.Status
         when 0 Then 1 Else=0 END) as count2
      from test t, test t1
      where t.id =t1.id
group by t.id;
...führt zum falschen Ergebnis?

Grüße
Biber
 
nein, leider nicht.
SQL:
SELECT t.id, COUNT(case t1.status when 1 Then 1 Else 0 END) as count1, COUNT(case t1.status when 0 Then 1 Else 0 END) as count0
FROM test t, test1 t1
WHERE t.id=t1.id
GROUP BY t.id
Da kommt bei count1 und count0 fälschlicherweise genau das gleiche raus. Er scheint die Bedingungen nicht zu beachten...
(Ich habe das mit der Summe zum Testen ersteinmal rausgenommen)

/edit
Ich habe MySQL v5.0.54
 
...ja, leuchtet mir auch ein (inzwischen)...
Es muss natürlich jeweils SUM() und nicht COUNT() als Aggregatsfunktion genommen werden.

Code:
      SELECT t.id, 
      sum(t.zahl),
      sum(case t1.STATUS when 1 Then 1 Else 0 END) AS count1, 
      SUM(case t1.STATUS when 0 Then 1 Else 0 END) AS count0
 
      FROM test t, test1 t1.
      WHERE t.id=t1.id
  
      GROUP BY t.id

Grüße
Biber
 
Zurück