- Kategorien:
Aggregationsfunktionen (Allgemein), Fensterfunktionen (Fensterrahmen)
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).
Bei Verwendung als Fensterfunktionen:
Diese Funktion unterstützt nicht:
ORDER BY-Unterklausel in der OVER()-Klausel. Die Reihenfolge der Werte spielt bei der Auswahl des häufigsten Wertes keine Rolle.
Fensterrahmen
Beispiele¶
Der folgende Code veranschaulicht die Verwendung von 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 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);
MODE
gibt den häufigsten 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.
MODE
wählt den Wert 10 aus:select mode(v) from aggr; +---------+ | MODE(V) | |---------| | 10.00 | +---------+Fügen Sie eine Zeile mit dem Wert NULL ein:
INSERT INTO aggr (k, v) VALUES (3, null);Rufen Sie den
MODE
-Wert für jede Gruppe ab. Beachten Sie, dass der zurückgegebene Wert für diese Gruppe NULL ist, da in Gruppe k = 3 nur NULL-Werte enthalten sind.select k, mode(v) from aggr group by k order by k; +---+---------+ | K | MODE(V) | |---+---------| | 1 | 10.00 | | 2 | 20.00 | | 3 | NULL | +---+---------+
MODE
kann auch als grundlegende 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 | +---+-------+-------------------------------+