Entwickler-Ecke

Datenbanken - kann mir wer nen praktisches beispiel für Group by geben?


CenBells - Di 22.10.02 14:37
Titel: kann mir wer nen praktisches beispiel für Group by geben?
HAllo,

der titel sagt irgendwie schon alles.
ich raff irgendwie nicht, wie die ergebnisse aussehen. Und was das Group by eigentlich soll.

Gruß
KEn


Alfons-G - Di 22.10.02 16:17

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

;)


CenBells - Di 22.10.02 17:20

danke, danke.
Das hat mir endlich mal geholfen... *g*