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


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().

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.