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

Fensterfunktionen

MODE( <expr1> ) OVER ( [ PARTITION BY <expr2> ] ) 
Copy

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

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

Fügen Sie einige Zeilen ein:

INSERT INTO aggr (k, v) VALUES (1, 10), (1, 10), (1, 10), (1, 10), (1, 20), (1, 21); 
Copy

Die Funktion MODE gibt den am häufigsten vorkommenden Wert 10 zurück:

select mode(v) from aggr; +---------+ | MODE(V) | |---------| | 10.00 | +---------+ 
Copy

Fügen Sie einige weitere Zeilen ein:

INSERT INTO aggr (k, v) VALUES (2, 20), (2, 20), (2, 25), (2, 30); 
Copy

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

Fügen Sie eine Zeile mit einem NULL-Wert ein:

INSERT INTO aggr (k, v) VALUES (3, null); 
Copy

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

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