Schnelle allgemeine Methode zur Berechnung von Perzentilen

9

Ich möchte n> 1 Perzentile einer unsortierten Spalte in PostgreSQL finden. Zum Beispiel das 20., 40., 60., 80. und 100. Perzentil.

Eine naheliegende Lösung besteht darin, die Spalte zu zählen und zu sortieren und dann einen Blick darauf zu werfen, aber ich hoffe auf eine bessere Lösung. Irgendwelche Ideen?

PS Ich habe eine gute Lösung für MySQL gefunden, kann sie aber nicht in psql übersetzen

Bob Jansen
quelle
2
Haben Sie darüber nachgedacht Windowing - Funktionen , zB CUME_DIST ()?
Jack sagt, versuchen Sie topanswers.xyz
Postgres hat PERCENT_RANK ()
Philᵀᴹ

Antworten:

12

Ich habe mir Folgendes ausgedacht:

select cume, max(var) AS max_var
from (
   select var
        , ntile(5) over (order by var) as cume
   from table
   ) as tmp
group by cume
order by cume;

Es wählt das Maximum jeder Gruppe aus, die mit geteilt wird ntile().

Bob Jansen
quelle