WHERE und
HAVING in
Kombination
mit GROUP BY |
 |
Beispiel |
|
RNr |
Kundenname |
RDatum |
Betrag |
Status |
| 1 |
Müller |
11.06.00 |
10 |
bezahlt |
| 2 |
Müller |
12.12.00 |
20 |
bezahlt |
| 3 |
Müller |
17.11.00 |
40 |
offen |
| 4 |
Müller |
05.09.00 |
80 |
offen |
| 5 |
Hoffmann |
20.02.00 |
1000 |
offen |
| 6 |
Hoffmann |
12.03.00 |
2000 |
bezahlt |
| 7 |
Hoffmann |
05.07.99 |
4000 |
bezahlt |
| 8 |
Hoffmann |
12.03.01 |
8000 |
offen |
| 9 |
Bauer |
12.07.00 |
1 |
bezahlt |
| 10 |
Bauer |
24.12.01 |
2 |
offen |
|
|
Wir gehen von der obigen Tabelle "Rechnung" aus. Nun wollen wir zu
jedem einzelnen Kunden wissen, wieviel Rechnungen er noch aus dem
Jahr 2000 offen (nicht bezahlt) hat, und wieviel Rechnungen aus dem Jahr
2000 er bereits bezahlt hat. Die Summe der offenen bzw. der beglichenen
Rechnungen soll ebenfalls ermittelt werden. Allerdings interessieren
uns nur größere Summen. Deshalb sollen nur eine Ausgabe erfolgen,
wenn die Summe der offenen bzw. beglichenen Rechnungen (eines
bestimmten Kunden im Jahr 2000) größer als 100DM ist:.
select kundenname, status, sum(betrag), count(betrag)
from rechnung
where datum > 31.12.99 AND datum < 01.01.01
group by kundenname, status
having sum(betrag) >100
| kundenname |
status |
sum |
count |
| Müller |
offen |
120 |
2 |
| Hoffmann |
offen |
1000 |
1 |
| Hoffmann |
bezahlt |
2000 |
1 |
|
 |
Erklärung |
|
Zuerst wird die where-Klausel ausgeführt: Dabei entfallen die Rechnungen
7,8 und 10 da sie nicht aus dem Jahr 2000 stammen. Es bleiben die grau
unterlegten Rechnungen übrig. Danach werden die Grupppen gebildet:
|
1.Müller / bezahlt
2.Müller / offen
3.Hoffmann / bezahlt
4.Hoffmann / offen
5.Bauer / bezahlt
|
| Gruppe 1 |
besteht aus 2
Rechnungen, die zusammen nur 30DM ergeben. Dies widerspricht der HAVING-Klausel.
Deshalb wird diese Gruppe nicht angezeigt. |
| Gruppe 2 |
besteht aus 2
Rechnungen über zusammen 120DM. |
| Gruppe 3 |
besteht aus einer
Rechnung über 1000DM. |
| Gruppe 4 |
besteht aus einer
Rechnung über 2000DM. |
| Gruppe 5 |
besteht aus einer
Rechnung. Da der Wert dieser
Rechnung nur 1 DM ist, wird die Rechnung
wegen der HAVING-Klausel nicht angezeigt. |
|
|