Version: Test
©Raddy 2001

SQL mit Oracle VII                                  zurück

Was man bei
GROUP BY
beachten muß
a-absatz.pcx (280 Byte)
Tabelle "Rechnung"

RNr.

Empfänger 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
Gegeben ist wieder eine Tabelle Rechnungen. Die Spalte Status gibt an,
ob die Rechnung bereits bezahlt ist oder noch offen (nicht bezahlt)
a-absatz.pcx (280 Byte)

GROUP-BY: Was man beachten muß

Schauen wir uns einmal folgenden select-Befehl an, und überlegen 
warum er nicht funktionieren wird:
 
    select Empfänger, sum(Betrag)
    from rechnung
    group by status;

Wir überlegen, wie der dieser select Befehl arbeitet:
  • Zuerst werden 2 Gruppen gebildet: offen und bezahlt
    Insgesamt werden also nur zwei Zeilen ausgegeben!
  • Jetzt überlegen wir: Wenn die erste Zeile die ausgegeben
    wird die "bezahlt" Zeile ist, welchen Namen soll der 
    select-Befehl hinter "bezahlt" schreiben. Schließlich hat
    sowohl Kunde Müller als auch Kunde Hoffmann bereits
    Rechnungen bezahlt! Deshalb kann der obige Befehl
    nicht funktionieren.
Besondere Vorsicht ist geboten, wenn erst wenige Datensätze in
der Tabelle stehen: 

RNr.

Empfänger Betrag Status
1 Müller 10 bezahlt
2 Müller 20 bezahlt
3 Hoffmann 8000 offen
Hier haben alle bezahlten Rechnungen den Empfänger "Müller", und
alle offenen Rechnungen den Empfänger Hoffmann. Hier würde der 
obige Befehl funktionieren, jedoch nur, bis eine offene Rechnung 
eingegeben wird, die nicht den Empfänger "Hoffmann" hat.