Aggregatfunktionen

Aggregatfunktionen 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 Aggregatfunktion 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 Aggregatfunktion 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 Aggregatfunktion 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 Aggregatfunktionen.

Verwendet eine andere Syntax als die anderen Aggregatfunktionen.

Alias für STDDEV_POP.

Alias für VAR_POP.

Alias für VAR_SAMP.

Bitweise Aggregation

Boolesche Aggregation

Hash

Aggregation semistrukturierter Daten

Lineare Regression

Statistik und Wahrscheinlichkeit

Kardinalitätsschätzung . (mit HyperLogLog)

Alias für HLL.

Keine Aggregatfunktion; 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 Aggregatfunktion; verwendet skalare Eingabe von APPROX_TOP_K_ACCUMULATE oder APPROX_TOP_K_COMBINE.

Perzentilschätzung . (mit t-Digest)

Keine Aggregatfunktion; verwendet skalare Eingabe von APPROX_PERCENTILE_ACCUMULATE oder APPROX_PERCENTILE_COMBINE.

Aggregations-Dienstprogramme

Keine Aggregatfunktion, kann jedoch in Verbindung mit Aggregatfunktionen 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 Aggregatfunktion (AVG) und einer Skalarfunktion (COS) Die Skalarfunktion gibt eine Ausgabezeile für jede Eingabezeile zurück, während die Aggregatfunktion 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 Aggregatfunktion gibt eine Ausgabezeile für mehrere Eingabezeilen zurück:

SELECT SUM(x)
    FROM simple;
+--------+
| SUM(X) |
|--------|
|     60 |
+--------+

Aggregatfunktionen und NULL-Werte

Einige Aggregatfunktionen 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 Aggregatfunktion übergebenen Werte NULL sind, gibt die Aggregatfunktion NULL zurück.

Einige Aggregatfunktionen können mehr als einer Spalte übergeben werden. Beispiel:

SELECT COUNT(col1, col2) FROM table1;

In diesen Fällen ignoriert die Aggregatfunktion 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 |
+-------+-------+