Kategorien:

Aggregatfunktionen (Allgemein), Fensterfunktionen

PERCENTILE_DISC

Gibt einen Perzentilwert zurück, der auf einer diskreten Verteilung der Eingabespalte basiert (im order_by_expr angegeben). Der zurückgegebene Wert ist derjenige, dessen Zeile den kleinsten CUME_DIST-Wert hat, der größer oder gleich dem angegebenen Perzentil ist. NULL-Werte werden bei der Berechnung ignoriert.

Siehe auch:

PERCENTILE_CONT

Syntax

Aggregatfunktion

PERCENTILE_DISC( <percentile> ) WITHIN GROUP (ORDER BY <order_by_expr> )
Copy

Fensterfunktionen

PERCENTILE_DISC( <percentile> ) WITHIN GROUP (ORDER BY <order_by_expr> ) OVER ( [ PARTITION BY <expr3> ] )
Copy

Argumente

percentile

Das Perzentil des Wertes, den Sie suchen möchten. Das Perzentil muss eine Konstante zwischen 0,0 und 1,0 sein. Wenn Sie beispielsweise den Wert am 90. Perzentil ermitteln möchten, geben Sie 0,9 an.

order_by_expr

Der Ausdruck (normalerweise ein Spaltenname), nach dem die Werte sortiert werden sollen. Wenn Sie beispielsweise nach dem Schüler suchen möchten, dessen SAT-Punktzahl für Mathematik beim 90. Perzentil liegt, geben Sie die Spalte an, die diese SAT-Punktzahl enthält.

Beachten Sie, dass dies implizit auch die Spalte ist, aus der die zurückgegebene Punktzahl ausgewählt wird. Wenn Sie beispielsweise nach SAT-Punktzahlen für Mathematik sortieren, dann ist das Ergebnis einer der SAT-Punktzahlen für Mathematik. Sie können nicht nach einer Spalte sortieren und den Perzentilwert einer anderen Spalte abrufen.

expr3

Dies ist der optionale Ausdruck zum Gruppieren von Zeilen in Partitionen.

Rückgabewerte

Gibt den Wert zurück, der sich am angegebenen Perzentil befindet.

Nutzungshinweise

  • Das percentile-Argument für die Funktion muss eine Konstante sein.

  • DISTINCT wird bei dieser Funktion nicht unterstützt.

  • Die Funktion PERCENTILE_CONT interpoliert zwischen den beiden nächstgelegenen Werten, während die Funktion PERCENTILE_DISC keine Interpolation ausführt, sondern den nächstgelegenen Wert auswählt.

  • Bei Verwendung als Fensterfunktion:

    • Diese Funktion unterstützt nicht:

      • ORDER BY-Unterklausel in der OVER()-Klausel

      • Fensterrahmen

Beispiele

Im folgenden Beispiel werden die Werte gezeigt, die innerhalb verschiedener Gruppen am 25. Perzentil (0,25) liegen:

Erstellen Sie eine Tabelle, und füllen Sie diese mit Werten:

create or replace table aggr(k int, v decimal(10,2));
insert into aggr (k, v) values
    (0,  0),
    (0, 10),
    (0, 20),
    (0, 30),
    (0, 40),
    (1, 10),
    (1, 20),
    (2, 10),
    (2, 20),
    (2, 25),
    (2, 30),
    (3, 60),
    (4, NULL);
Copy

Führen Sie eine Abfrage aus, und zeigen Sie die Ausgabe an:

select k, percentile_disc(0.25) within group (order by v) 
  from aggr 
  group by k
  order by k;
+---+-------------------------------------------------+
| K | PERCENTILE_DISC(0.25) WITHIN GROUP (ORDER BY V) |
|---+-------------------------------------------------|
| 0 |                                           10.00 |
| 1 |                                           10.00 |
| 2 |                                           10.00 |
| 3 |                                           60.00 |
| 4 |                                            NULL |
+---+-------------------------------------------------+
Copy