Kategorien:

Aggregatfunktionen (Allgemein), Fensterfunktionen (Fensterrahmen)

MODE

Gibt den häufigsten Wert für die Werte in Ausdruck1 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

Ausdruck1

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

Ausdruck2

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, 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, 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 | 20.00 |                         10.00 |
| 1 | 21.00 |                         10.00 |
| 2 | 20.00 |                         20.00 |
| 2 | 25.00 |                         20.00 |
| 2 | 30.00 |                         20.00 |
| 3 |  NULL |                          NULL |
+---+-------+-------------------------------+