- Kategorien:
Aggregatfunktionen (General) , Fensterfunktionen
MODE¶
Gibt den häufigsten Wert für die Werte in expr1
zurück. NULL-Werte werden ignoriert. Wenn alle Werte NULL oder 0 Zeilen sind, gibt die Funktion NULL zurück.
Syntax¶
Aggregatfunktion
MODE( <expr1> )
Fensterfunktionen
MODE( <expr1> ) OVER ( [ PARTITION BY <expr2> ] )
Argumente¶
expr1
Dieser Ausdruck erzeugt die Werte, die durchsucht werden, um den häufigsten Wert zu finden. Der Ausdruck kann einen der folgenden Datentypen haben:
BINARY
BOOLEAN
DATE
FLOAT
INTEGER
NUMBER
TIMESTAMP (TIMESTAMP_LTZ, TIMESTAMP_NTZ, TIMESTAMP_TZ)
VARCHAR
VARIANT
Diese Funktion unterstützt folgende Datentypen nicht:
ARRAY
GEOGRAPHY
OBJECT
expr2
Der optionale Ausdruck, nach dem die Daten in Gruppen aufgeteilt werden sollen. Die Ausgabe enthält den häufigsten Wert für jede Gruppe/Partition.
Rückgabewerte¶
Der Datentyp des Rückgabewerts ist identisch mit dem Datentyp des Eingabeausdrucks.
Nutzungshinweise¶
Wenn für den häufigsten Wert ein Gleichstand besteht (zwei oder mehr Werte treten gleich häufig auf und häufiger als alle anderen Werte), gibt MODE einen dieser Werte zurück.
DISTINCT wird bei dieser Funktion nicht unterstützt.
Selbst wenn NULL der häufigste Wert ist, gibt die Funktion nicht NULL zurück (es sei denn, alle Werte sind NULL).
Wenn diese Funktion als Fensterfunktion aufgerufen wird, wird sie nicht unterstützt:
Eine ORDER BY-Klausel innerhalb der OVER-Klausel.
Explizite Fensterrahmen.
Beispiele¶
Der folgende Code veranschaulicht die Verwendung der Funktion MODE:
Erstellen Sie eine Tabelle und Daten:
create or replace table aggr(k int, v decimal(10,2));
Rufen Sie den Wert MODE für die Spalte v
ab. Die Funktion gibt NULL zurück, da keine Zeilen vorhanden sind.
select mode(v) from aggr;
+---------+
| MODE(V) |
|---------|
| NULL |
+---------+
Fügen Sie einige Zeilen ein:
INSERT INTO aggr (k, v) VALUES
(1, 10),
(1, 10),
(1, 10),
(1, 10),
(1, 20),
(1, 21);
Die Funktion MODE gibt den am häufigsten vorkommenden Wert 10
zurück:
select mode(v) from aggr;
+---------+
| MODE(V) |
|---------|
| 10.00 |
+---------+
Fügen Sie einige weitere Zeilen ein:
INSERT INTO aggr (k, v) VALUES
(2, 20),
(2, 20),
(2, 25),
(2, 30);
Jetzt gibt es zwei häufigste Werte. Die Funktion MODE wählt den Wert 10
aus:
select mode(v) from aggr;
+---------+
| MODE(V) |
|---------|
| 10.00 |
+---------+
Fügen Sie eine Zeile mit einem NULL-Wert ein:
INSERT INTO aggr (k, v) VALUES (3, null);
Rufen Sie den MODE-Wert für jede Gruppe ab. Beachten Sie, dass der Rückgabewert für diese Gruppe NULL lautet, da die Gruppe k = 3
nur NULL-Werte enthält.
select k, mode(v)
from aggr
group by k
order by k;
+---+---------+
| K | MODE(V) |
|---+---------|
| 1 | 10.00 |
| 2 | 20.00 |
| 3 | NULL |
+---+---------+
Die Funktion MODE kann auch als einfache Fensterfunktion mit einer OVER-Klausel verwendet werden:
select k, v, mode(v) over (partition by k)
from aggr
order by k, v;
+---+-------+-------------------------------+
| K | V | MODE(V) OVER (PARTITION BY K) |
|---+-------+-------------------------------|
| 1 | 10.00 | 10.00 |
| 1 | 10.00 | 10.00 |
| 1 | 10.00 | 10.00 |
| 1 | 10.00 | 10.00 |
| 1 | 20.00 | 10.00 |
| 1 | 21.00 | 10.00 |
| 2 | 20.00 | 20.00 |
| 2 | 20.00 | 20.00 |
| 2 | 25.00 | 20.00 |
| 2 | 30.00 | 20.00 |
| 3 | NULL | NULL |
+---+-------+-------------------------------+