Summierung über mehrere Tabellen

Ich habe mehrereTabellen undmache folgendeAbfrage

$mquery = " SELECT
SUM(t2.wert)+SUM(t4.wert) AS wertsumme,
t1.PTARIFID,
t1.datum_add,
DATE_FORMAT(datum_add,'%d.%m.%Y') AS fdatum_add
FROM
".MODUL_PROVISION." AS t1
LEFT OUTER JOIN
".MODUL_PROVISIONSTARIF." AS t2 ON t1.PTARIFID = t2.PTARIFID
LEFT OUTER JOIN
".MODUL_PROVISIONTOOPTION." AS t3 ON t1.PID = t3.PID
LEFT OUTER JOIN
".MODUL_PROVISIONSOPTION." AS t4 ON t3.POPTIONID = t4.POPTIONID
GROUP BY
t1.datum_add
";


DiePROVISIONTOI ist eine verknüpfungstabelle.Ich bekomme aber nicht die richtigen Aummen. Spätestenswenn eskeine Option gibt, wird 0 als Ergebnis ausgegeben

Warum= Wie kann man das beheben?
 
Hallo,

es scheint an der summierung liegen.

Wenn ich das

SUM(t2.wert)+SUM(t4.wert) AS wertsumme

durch dasersetze

SUM(t2.wert) AS wertsumme

Dann werden die Werte nicht auf 0gesetzt aber ich habe dann nur die Tarifwerte und nicht die Optionswerte
 
grundlegend sorgt der group by für den "reset" bei aggregatfunktionen. prüfe doch mal, ob du irgendwo einen null wert in den zu summierenden feldern hast, diese müssen bei summierungen immer behandelt werden (bei mysql gibts glaub ich die funktion
Code:
ifnull(<summenfeld>,<ersatzwert, vorzugsweise 0>)
).

bsp:
Code:
mysql> select * from test;
+------+------+
| a1   | a2   |
+------+------+
|    1 |    1 |
|    1 |    1 |
|    1 |    1 |
|    1 |    1 |
|    1 |    2 |
|    1 |    3 |
|    1 |    4 |
|    1 | NULL |
+------+------+
8 rows in set (0.00 sec)

mysql> select sum(a1)+sum(a2) from test;
+-----------------+
| sum(a1)+sum(a2) |
+-----------------+
|              21 |
+-----------------+
1 row in set (0.00 sec)

mysql> select sum(a1)+sum(a2) from test group by a2;
+-----------------+
| sum(a1)+sum(a2) |
+-----------------+
|            NULL |
|               8 |
|               3 |
|               4 |
|               5 |
+-----------------+
5 rows in set (0.00 sec)

Bei der Gruppierung tritt genau der Effekt auf NULL+1 = NULL, so stimmt die auswertung dann wieder:
mysql> select sum(a1)+sum(ifnull(a2,0)) from test group by a2;
+---------------------------+
| sum(a1)+sum(ifnull(a2,0)) |
+---------------------------+
|                         1 |
|                         8 |
|                         3 |
|                         4 |
|                         5 |
+---------------------------+
5 rows in set (0.00 sec)
 
Zurück