Aggregationsfunktionen¶
Aggregationsfunktionen arbeiten mit Werten über Zeilen hinweg, um mathematische Berechnungen wie Summe, Durchschnitt, Zählung, Minimum-/Maxim-/Durchschnittswert, Standardabweichung und Schätzung sowie andere nicht mathematische Operationen durchzuführen.
Eine Aggregationsfunktion nimmt mehrere Zeilen (tatsächlich keine, eine oder mehrere Zeilen) als Eingabe auf und erzeugt eine einzelne Ausgabe. Im Gegensatz dazu benötigen Skalarfunktionen eine Zeile als Eingabe und erzeugen eine Zeile (einen Wert) als Ausgabe.
Eine Aggregationsfunktion gibt immer genau eine Zeile zurück, auch wenn die Eingabe null Zeilen enthält. Wenn die Eingabe null Zeilen enthält, ist die Ausgabe normalerweise NULL. Eine Aggregationsfunktion kann jedoch 0, eine leere Zeichenfolge oder einen anderen Wert zurückgeben, wenn Nullzeilen übergeben werden.
Unter diesem Thema:
Liste der Funktionen (nach Unterkategorie)¶
Funktionsname |
Anmerkungen |
---|---|
Allgemeine Aggregation |
|
Verwendet eine andere Syntax als die anderen Aggregationsfunktionen. |
|
Verwendet eine andere Syntax als die anderen Aggregationsfunktionen. |
|
STDDEV und STDDEV_SAMP sind Aliasse. |
|
Alias für VAR_POP. |
|
Alias für VAR_SAMP. |
|
Bitweise Aggregation |
|
Boolesche Aggregation |
|
Hash |
|
Aggregation semistrukturierter Daten |
|
Lineare Regression |
|
Statistik und Wahrscheinlichkeit |
|
Zählen diskreter Werte |
|
Kardinalitätsschätzung . (mit HyperLogLog) |
|
Alias für HLL. |
|
Keine Aggregationsfunktion; verwendet skalare Eingabe von HLL_ACCUMULATE oder HLL_COMBINE. |
|
Ähnlichkeitsschätzung . (mit MinHash) |
|
Alias für APPROXIMATE_SIMILARITY. |
|
Häufigkeitsschätzung . (mit Space-Saving) |
|
Keine Aggregationsfunktion; verwendet skalare Eingabe von APPROX_TOP_K_ACCUMULATE oder APPROX_TOP_K_COMBINE. |
|
Perzentilschätzung . (mit t-Digest) |
|
Keine Aggregationsfunktion; verwendet skalare Eingabe von APPROX_PERCENTILE_ACCUMULATE oder APPROX_PERCENTILE_COMBINE. |
|
Aggregations-Dienstprogramme |
|
Keine Aggregationsfunktion, kann jedoch in Verbindung mit Aggregationsfunktionen verwendet werden, um die Aggregationsebene für eine Zeile zu bestimmen, die von einer GROUP BY-Abfrage erstellt wird. |
|
Alias für GROUPING. |
Einführungsbeispiel¶
Das folgende Beispiel veranschaulicht den Unterschied zwischen einer Aggregationsfunktion (AVG) und einer Skalarfunktion (COS) Die Skalarfunktion gibt eine Ausgabezeile für jede Eingabezeile zurück, während die Aggregationsfunktion eine Ausgabezeile für mehrere Eingabezeilen zurückgibt:
Die Tabelle enthält folgende Daten:
SELECT x, y FROM simple ORDER BY x,y; +----+----+ | X | Y | |----+----| | 10 | 20 | | 20 | 44 | | 30 | 70 | +----+----+Die Skalarfunktion gibt für jede Eingabezeile eine Ausgabezeile zurück.
SELECT COS(x) FROM simple ORDER BY x; +---------------+ | COS(X) | |---------------| | -0.8390715291 | | 0.4080820618 | | 0.1542514499 | +---------------+Die Aggregationsfunktion gibt eine Ausgabezeile für mehrere Eingabezeilen zurück:
SELECT SUM(x) FROM simple; +--------+ | SUM(X) | |--------| | 60 | +--------+
Aggregationsfunktionen und NULL-Werte¶
Einige Aggregationsfunktionen ignorieren NULL-Werte. Beispielsweise berechnet AVG den Durchschnitt der Werte 1
, 5
und NULL
mit dem Ergebnis 3
, basierend auf der folgenden Formel:
(1 + 5) / 2 = 3
Sowohl im Zähler als auch im Nenner werden nur die beiden Nicht-NULL-Werte verwendet.
Wenn alle an die Aggregationsfunktion übergebenen Werte NULL sind, gibt die Aggregationsfunktion NULL zurück.
Einige Aggregationsfunktionen können mehr als einer Spalte übergeben werden. Beispiel:
SELECT COUNT(col1, col2) FROM table1;
In diesen Fällen ignoriert die Aggregationsfunktion eine Zeile, wenn eine einzelne Spalte NULL ist.
In der folgenden Abfrage gibt COUNT beispielsweise 1
zurück, nicht 4
, da drei der vier Zeilen mindestens einen NULL-Wert in den ausgewählten Spalten enthalten:
Erstellen Sie eine Tabelle, und füllen Sie sie mit Werten auf:
CREATE TABLE t (x INT, y INT); INSERT INTO t (x, y) VALUES (1, 2), -- No NULLs. (3, NULL), -- One but not all columns are NULL. (NULL, 6), -- One but not all columns are NULL. (NULL, NULL); -- All columns are NULL.Abfragen der Tabelle:
SELECT COUNT(x, y) FROM t; +-------------+ | COUNT(X, Y) | |-------------| | 1 | +-------------+
Wenn SUM mit einem Ausdruck aufgerufen wird, der auf zwei oder mehr Spalten verweist, und wenn eine oder mehrere dieser Spalten NULL sind, wird der Ausdruck zu NULL ausgewertet, und die Zeile wird ignoriert:
SELECT SUM(x + y) FROM t; +------------+ | SUM(X + Y) | |------------| | 3 | +------------+
Beachten Sie, dass sich dieses Verhalten vom Verhalten von GROUP BY unterscheidet, wodurch Zeilen nicht gelöscht werden, wenn einige Spalten NULL sind:
SELECT x AS X_COL, y AS Y_COL FROM t GROUP BY x, y; +-------+-------+ | X_COL | Y_COL | |-------+-------| | 1 | 2 | | 3 | NULL | | NULL | 6 | | NULL | NULL | +-------+-------+