Database Reference
In-Depth Information
SELECT count( * ) FROM events WHERE venue _ id = 1;
SELECT count( * ) FROM events WHERE venue _ id = 2;
SELECT count( * ) FROM events WHERE venue _ id = 3;
SELECT count( * ) FROM events WHERE venue _ id IS NULL;
Das wäre sehr lästig, wenn die Zahl der Veranstaltungsorte wächst. Daher
nutzen wir den GROUP BY -Befehl.
Gruppierung
GROUP BY ist ein Kürzel, das die obigen Queries auf einmal ausführt. Mit GROUP
BY weisen Sie Postgres an, die Zeilen zu gruppieren und dann eine Aggregat-
funktion (wie count() ) auf diese Gruppen anzuwenden.
SELECT venue _ id, count( * )
FROM events
GROUP BY venue _ id;
venue _ id | count
----------+-------
1|
1
2|
2
3|
1
|
3
Das ist eine nette Liste, aber die Frage ist, ob wir sie über die count() -
Funktion filtern können. Die Antwort lautet ja. Die GROUP BY -Bedingung be-
sitzt ein eigenes Filter-Schlüsselwort: HAVING . HAVING verhält sich wie die
WHERE -Klausel, nur dass es über Aggregatfunktionen filtert (was WHERE nicht
kann).
Die folgende Query liefert die beliebtesten Veranstaltungsorte zurück, d. h.
diejenigen mit zwei oder mehr Events:
SELECT venue _ id
FROM events
GROUP BY venue _ id
HAVING count ( * )>=2 AND venue _ id IS NOT NULL;
venue _ id | count
----------+-------
2|
2
Sie können GROUP BY auch ohne Aggregatfunktion nutzen. Wenn Sie SELECT...
FROM...GROUP BY für eine Spalte ausführen, erhalten Sie eine Liste aller ein-
deutigen Werte zurück.
SELECT venue _ id FROM events GROUP BY venue _ id;
Search WWH ::




Custom Search