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 beliebigen Datentyp haben.

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