Kleines Nachschlagewerk Informatik
Gruppierungen
Worum geht es?
Mit der GROUP BY- Klausel fasst man Datensätze - wie der Name schon sagt - zu Gruppen zusammen. Über diese Gruppen kann man dann aber nur noch - von Auflistungen abgesehen - statistische Aussagen machen, man ist auf die Aggregatfunktionen beschränkt.
Struktur
Die Struktur einer solchen Abfrage ist:

      SELECT Spalte FROM Tabelle GROUP BY Spalte
            
Die Relation Mitarbeiter wird erweitert um die Adresse (Ort, PLZ etc.). Jetzt kann man fragen, wie viele Mitarbeiter aus gleichen Orten kommen.

      SELECT Ort, count(Ort) FROM Mitarbeiter GROUP BY Ort
            
Gruppenauswahl
Mit HAVING kann man Gruppen auswählen. Die Struktur ist

      SELECT Spalte FROM Tabelle GROUP BY Spalte HAVING Bedingung
            
Möchte man wissen, ob es Orte gibt, aus denen nur ein Mitarbeiter kommt, schreibt man:

      SELECT Ort, count(Ort) FROM Mitarbeiter
          GROUP BY Ort HAVING count(Ort) < 2
            
WHERE ist nicht möglich, da es mit den Aggregatfunktionen nicht umgehen kann. Eine weitere Einschränkung mit WHERE ist aber schon möglich. Man kann sich nur die Orte ausgeben lassen, die mit A beginnen.

      SELECT Ort, count(Ort) FROM Mitarbeiter
          WHERE Ort like 'A%' GROUP BY Ort
            
Man beachte, dass WHERE vor GROUP BY kommt, denn erst wird ausgewählt, dann gruppiert.

Möchte man schlussendlich noch die (völlig sinnlose) Anfrage stellen, welche Orte mit A nur einen Mitarbeiter in die Firma entsenden, kann man dies mit einer Kombination von GROUP BY, HAVING und WHERE erledigen:

      SELECT Ort, count(Ort) FROM Mitarbeiter
          WHERE Ort like 'A%'
          GROUP BY Ort HAVING count(Ort) <= 1