Ilja: wo ist der Fehler?

Beitrag lesen

yo,

Die Namen habe ich hier nur so zum Verständnis hingeschrieben.

nun, sie machen uns das leber schwerer, namen mit sinnvollen bedeutungen machen es einfacher, weil man davon eine plastische vorstellung hat.

Bei MySQL kann man einen Alias zur Gruppierung nutzen.

ja, wie aber bereits erwähnt, machen das nicht alle dbms. sicherlich nutzt man auch immer die eigenen funktionalitäten eines dbms, zum beispiel group_contact. aber in deinem falle liegt es anderes, du verlierst die fähigkeit zu portieren, wenn dein dbms wechselt, hast aber auf der anderen seite keinen vorteil davon. deswegen würde ich deine abfrage nicht nach den aliasnamen gruppieren. wer will schon einen nachteil ohne auch einen vorteil zu haben ?

Danke, die Ergebnisse sind aber nicht anders als bei meiner Version.

sollten sie auch nicht, es sollte dir zeigen, dass die gleichen ergebnisse rauskommen, die schreibweise aber beser ist, da sie leserlicher ist.

Wo ist der logische Fehler?

ich habe dir ja bereits gesagt, dass du bei deiner ersten abfrage jeweils nur über zwei tabellen gehst und bei deiner dritten über drei. wenn die summen in der ersten abfrage stimmen, kannst du nicht einfach die dritter tabelle anhängen und dann wieder die summen über die gruppierung bilden.

was dir vermutlich helfen wird ist zwei abfragen mit jeweils nur zwei tabellen und dann beide ergebnisse mit UNION ALL miteinander verbinden.

SELECT year(datum) as group_a, month(datum) as group_b, sum(wert_a) FROM tab_datum
INNER JOIN tab_a ON tab_datum.id=tab_a.datum_id
WHERE tab_datum.datum >= '2007-01-01'
GROUP BY  year(datum), month(datum)
UNION ALL
SELECT year(datum) as group_a, month(datum) as group_b, sum(wert_a) FROM tab_datum
INNER JOIN tab_b ON tab_datum.id=tab_b.datum_id
WHERE tab_datum.datum >= '2007-01-01'
GROUP BY  year(datum), month(datum)

Ilja