SQL-Aggregatfunktionen, GROUP BY, HAVING sowie Distinct- und erweiterte Aggregate, mit Rückgabewert und Einzeiler-Beispiel auf einer Bestellungstabelle.
Aggregatfunktionen verdichten viele Zeilen zu einem skalaren Ergebnis. GROUP BY partitioniert Zeilen vor der Aggregation nach Schlüssel. HAVING filtert Gruppen nach der Aggregation. NULL-Eingaben werden von jedem Aggregat außer COUNT(*) übersprungen.
Nachschlagetabelle · 29 Einträge
SQL-AggregatfunktionenExplained
29 of 29 rows
Skalar
Anzahl der Nicht-NULL-Eingabewerte; COUNT(*) zählt alle Zeilen.
SELECT COUNT(*) FROM orders
Summe der numerischen Nicht-NULL-Werte. Gibt bei leerer Menge NULL zurück.
SELECT SUM(total) FROM orders
Arithmetisches Mittel der numerischen Nicht-NULL-Werte. NULL-Eingaben werden ignoriert.
SELECT AVG(total) FROM orders
Kleinster Nicht-NULL-Wert über jeden vergleichbaren Typ.
SELECT MIN(total) FROM orders
Größter Nicht-NULL-Wert über jeden vergleichbaren Typ.
SELECT MAX(total) FROM orders
Gruppiert
Partitioniert die Eingabezeilen nach Schlüssel; Aggregate laufen pro Partition.
SELECT user_id, SUM(total) FROM orders GROUP BY user_id
Prädikat, das pro Gruppe nach der Aggregation ausgewertet wird. Ersetzt WHERE bei Aggregaten.
SELECT user_id, COUNT(*) FROM orders GROUP BY user_id HAVING COUNT(*) > 5
Mehrere Aggregate pro Gruppe in einem Durchlauf.
SELECT user_id, COUNT(*), SUM(total), AVG(total) FROM orders GROUP BY user_id
Berechnet mehrere Gruppierungen in einer Anweisung; Schlüssel außerhalb der aktuellen Menge liefern NULL.
SELECT user_id, region, SUM(total) FROM orders GROUP BY GROUPING SETS ((user_id), (region), ())
Kurzform für hierarchische Grouping-Sets; ergibt Zwischensummen und eine Gesamtsumme.
SELECT region, user_id, SUM(total) FROM orders GROUP BY ROLLUP (region, user_id)
Kurzform für jede Kombination der aufgeführten Schlüssel als Grouping-Sets.
SELECT region, user_id, SUM(total) FROM orders GROUP BY CUBE (region, user_id)
Mischt einfache Gruppenschlüssel mit Grouping-Sets in einer Klausel.
SELECT user_id, region, SUM(total) FROM orders GROUP BY user_id, GROUPING SETS ((region), ())
Behält die erste Zeile pro Schlüssel in Sortierreihenfolge. Postgres-Erweiterung.
SELECT DISTINCT ON (user_id) user_id, total FROM orders ORDER BY user_id, created_at DESC
Schätzt die Anzahl unterschiedlicher Werte mit begrenztem Fehler; für große Eingaben gebaut.
SELECT APPROX_COUNT_DISTINCT(user_id) FROM orders
Verkettet Nicht-NULL-Strings mit einem Trennzeichen.
SELECT STRING_AGG(user_id::text, ',') FROM orders
Verkettet Nicht-NULL-Strings; der MySQL-Name für STRING_AGG.
SELECT GROUP_CONCAT(user_id SEPARATOR ',') FROM orders
Sammelt Nicht-NULL-Eingabewerte in einem Array.
SELECT ARRAY_AGG(total) FROM orders
Sammelt Eingabezeilen in einem JSON-Array; die JSONB-Form speichert geparst als Binärdaten.
SELECT JSONB_AGG(user_id) FROM orders
TRUE, wenn jeder / ein Nicht-NULL-Eingabewert wahr ist.
SELECT BOOL_AND(total > 0), BOOL_OR(total > 100) FROM orders
Standard-Alias für BOOL_AND.
SELECT EVERY(total > 0) FROM orders
Interpoliertes / Nearest-Rank-Perzentil über der sortierten Eingabe; erfordert WITHIN GROUP.
SELECT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY total) FROM orders
Häufigster Eingabewert; ein Ordered-Set-Aggregat in Postgres.
SELECT MODE() WITHIN GROUP (ORDER BY total) FROM orders
Übergibt die Sortierung an Ordered-Set- und Hypothetical-Set-Aggregate.
SELECT RANK(500) WITHIN GROUP (ORDER BY total) FROM orders
Beschränkt das Aggregat auf die Zeilen, die die Bedingung erfüllen.
SELECT COUNT(*) FILTER (WHERE total > 100) FROM orders
Sortiert Werte, bevor sie das Aggregat verknüpft oder sammelt.
SELECT STRING_AGG(user_id::text, ',' ORDER BY user_id) FROM orders
COUNT(*) und COUNT(1) zählen jede Zeile; COUNT(col) überspringt NULL-Eingaben.
SELECT COUNT(*), COUNT(total), COUNT(1) FROM orders
Stichproben-Standardabweichung der numerischen Nicht-NULL-Werte. STDDEV_POP liefert die Populationsform; der Standard des nackten Namens unterscheidet sich je Engine.
SELECT STDDEV(total) FROM orders
Stichproben-Varianz der numerischen Nicht-NULL-Werte (Quadrat von STDDEV). VAR_SAMP und VAR_POP benennen jede Form.