Das Ganze ist eigentlich recht simpel. Mit
group by kannst Du Datensätze zusammenfassen, welche in bestimmten Feldern identische Werte enthalten.
Angenommen, Du hast eine Tabelle, in der sind Kunden und offene Rechnungen enthalten:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| Name Datum Betrag ----------------------------------- Maier 15.09.02 1535,50 Huber 16.10.02 350,00 Maier 17.10.02 550,25 Schmidt 18.10.02 1010,00 Schmidt 19.10.02 317,30 Schuldner 08.08.02 1111,10 |
Jetzt willst Du wissen, wieviel jeder einzele Kunde Dir schuldig ist:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| select Name, sum(Betrag) as Summe from Offen group by Name order by Name /
Name Betrag ------------------------- Huber 350,00 Maier 1885,75 Schmidt 1327,30 Schuldner 1111,10 |
Somit hast Du die Gesamtbeträge aller Kunden. Bei einer Abfrage mit Gruppierung ist es wichtig, dass jede Spalte entweder in der
group by-Klausel enthalten ist, oder darauf eine Funktion ausgeführt wird.
Hättest Du also die Spalte "Datum" bei
select mit aufgenommen, bekämst Du eine Fehlermeldung. Willst Du aber zusätzlich wissen, von wann die älteste Rechnung ist und wieviele offene Posten der Kunde hat, so kannst Du die Abfrage erweitern:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| select Name, min(Datum) as Seit, sum(Betrag) as Summe , count(Betrag) as Anzahl from Offen group by Name order by Name /
Name Seit Betrag Anzahl --------------------------------------------- Huber 16.10.02 350,00 1 Maier 15.09.02 1885,75 2 Schmidt 18.10.02 1327,30 2 Schuldner 08.08.02 1111,10 1 |
Ich hoffe, das Beispiel hat Dir geholfen
