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 |
+----+----+
Copy

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 |
+---------------+
Copy

Die Aggregationsfunktion gibt eine Ausgabezeile für mehrere Eingabezeilen zurück:

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

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;
Copy

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.
Copy

Abfragen der Tabelle:

SELECT COUNT(x, y) FROM t;
+-------------+
| COUNT(X, Y) |
|-------------|
|           1 |
+-------------+
Copy

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 |
+------------+
Copy

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 |
+-------+-------+
Copy