Version: Test
©Raddy 2001

SQL mit Oracle VIII                              zurück

WHERE und
HAVING in
Kombination
mit GROUP BY
a-absatz.pcx (280 Byte)

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
a-absatz.pcx (280 Byte)

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.