Database Reference
In-Depth Information
Diese Art der Gruppierung ist so gängig, dass SQL dafür mit
DISTINCT
ein
eigenes Schlüsselwort kennt.
SELECT
DISTINCT venue
_
id
FROM
events;
Die Ergebnisse beider Queries sind identisch.
GROUP BY in MySQL
Wenn Sie bei MySQL versuchen, ein
SELECT
mit Spalten auszuführen, die nicht unter
GROUP BY
definiert sind, wird es Sie vielleicht schockieren zu sehen, dass es funktio-
niert. Das ließ uns ursprünglich an der Notwendigkeit von Fensterfunktionen zwei-
feln. Doch als wir die Daten genauer untersuchten, die MySQL zurücklieferte, stellte
sich heraus, dass nur eine zufällige Auswahl von Datensätzen zurückgegeben wur-
de, nicht alle relevanten Ergebnisse. Das ist nicht besonders sinnvoll (und sogar
potentiell gefährlich).
Window-Funktionen
Wenn Sie in der Vergangenheit irgendeine Art Produktivsystem mit relatio-
nalen Datenbanken entwickelt haben, sind Sie mit Aggregatfunktionen sehr
wahrscheinlich vertraut. Sie sind ein gängiges SQL-Werkzeug.
Fensterfunk-
tionen
(window functions) sind dagegen nicht so weit verbreitet (PostgreSQL
ist eine der wenigen Open-Source-Datenbanken, die sie implementiert).
Fensterfunktionen ähneln
GROUP BY
-Queries darin, dass sie es erlauben, Ag-
gregatfunktionen auf mehrere Spalten anzuwenden. Der Unterschied besteht
darin, dass sie es erlauben, fest eingebaute Aggregatfunktionen zu nutzen,
ohne dass jedes einzelne Feld in eine einzelne Zeile gruppiert werden muss.
Wenn Sie versuchen, die
title
-Spalte auszuwählen, ohne sie zu gruppieren,
müssen Sie mit einer Fehlermeldung rechnen.
SELECT
title, venue
_
id, count(
*
)
FROM
events
GROUP BY
venue
_
id;
ERROR: column "events.title" must appear in the GROUP BY clause or \
be used in an aggregate function
Wir zählen die Zeilen nach
venue
_
id
und im Falle von
LARP Club
und
Wed-
ding
gibt es zwei Titel für eine
venue
_
id
.Postgresweißnicht,
welcher
Titel
ausgegeben werden soll.