Rechnung in SQL Abfrage?

1 Antwort

Vom Beitragsersteller als hilfreich ausgezeichnet

Das SUM() brauchst du, weil du ja nicht die einzelnen Buchungen haben willst, sondern die Summe aller Buchungen in einem bestimmten Zeitraum (WHERE), zusammengefasst nach Filialien (GROUP BY).

SELECT f.Filiale_ID, f.FilialeName, SUM(a.Verkaufspreis * v.Menge) AS Umsatz FROM ... WHERE MONTH(Datum)=2 AND YEAR(Datum)=2016 GROUP BY f.Filiale_ID, f.FilialeName

Das GROUP BY sorgt dafür, das Einträge mit gleicher Fililale_ID und FilialeName zusammengefasst werden. Diese zusammengefassten Einträge sind aber nun mehrere Zeilen (Pro Filialie kann es mehrere Buchungen in dem Zeitraum geben), deshalb müssen diese mit einer Aggregatfunktion wie SUM() "behadndelt" werden, damit da nur noch ein Wert pro Filialie entsteht.

Es gibt eine relativ einfache Regel, wenn gruppiert wird, müssen alle Spalten nach dem SELECT, die nicht im GROUP BY stehen, mit einer Aggregatfunktion (SUM, COUNT, AVG, MIN, etc.) zusammengefasst werden, dort dürfen keine weiteren Spalten ohne Aggregatfunktion stehen.

Woher ich das weiß:Berufserfahrung – Softwareentwickler & Admin

DeeJaySteeLP 
Beitragsersteller
 12.06.2020, 14:01

Also kurz gesagt: Benötige ich ein GROUP BY, muss ich eine Aggregatfunktion nutzen.

0