Mehrere
Gruppierungs-
kriterien |
 |
Tabelle
"Rechnung" |
|
RNr. |
Kundenname |
Betrag |
Status |
| 1 |
Müller |
10 |
bezahlt |
| 2 |
Müller |
20 |
bezahlt |
| 3 |
Müller |
40 |
offen |
| 4 |
Müller |
80 |
offen |
| 5 |
Hoffmann |
1000 |
bezahlt |
| 6 |
Hoffmann |
2000 |
bezahlt |
| 7 |
Hoffmann |
4000 |
bezahlt |
| 8 |
Hoffmann |
8000 |
offen |
| 9 |
Bauer |
1 |
bezahlt |
| 10 |
Bauer |
2 |
bezahlt |
Gegeben ist wieder eine Tabelle Rechnung, jedoch mit anderen Werten.
|
 |
Mehrere
Gruppierungskriterien |
|
Nun möchten wir zu jeden Kunden wissen, wie hoch die Summe der
bezahlten bzw. offenen Rechnungen ist:
select kundenname, status, sum(betrag), count(kundenname)
from rechnung
group by status, kundenname
Zuerst überlegen wir, welche Spalten ausgegeben werden:
Der Kunde Hoffmann hat bezahlte und offene Rechnungen,
also haben wir hier 2 Zeilen. Genauso beim Kunden Hoffmann,
auch er erzeugt 2 Zeilen. Der Kunde Bauer hat dagegen nur
bezahlte Rechnungen, er erzeugt also nur 1Spalte.
| kundenname |
status |
sum |
count |
| Hoffmann |
bezahlt |
7000 |
3 |
| Hoffmann |
offen |
8000 |
1 |
| Müller |
bezahlt |
30 |
2 |
| Müller |
offen |
120 |
2 |
| Bauer |
bezahlt |
3 |
2 |
Nun zeigen wir, wie die Spalte sum der Ergebnistabelle zustandekommt:
Der select Befehl berechnet die Summe aus der Spalte Betrag,
und zwar für jede Kombination von Gruppierungskriterien einzeln.
Was bedeuted das für unser Beispiel:
Der Select Befehl berechnet zuerst die Summe aus der Spalte
Betrag für die Gruppenkriterien-Kombination Hoffmann/bezahlt,
dann für die Kombination Hoffmann/offen dann für die
Kombination Müller/bezahlt usw.
Beim Befehl count arbeitet genauso.
|
|