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.
 
Search WWH ::




Custom Search