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