Metodo generale veloce per calcolare i percentili


9

Voglio trovare n> 1 percentili di una colonna non ordinata in PostgreSQL. Ad esempio il 20 °, 40 °, 60 °, 80 ° e 100 ° percentile.

Una soluzione ovvia è contare e ordinare la colonna e poi dare un'occhiata ma spero in una soluzione migliore. Qualche idea?

PS Ho trovato una buona soluzione per MySQL ma non riesco a tradurla in psql


2
Hai considerato le funzioni di windowing , ad esempio cume_dist ()?
Jack dice di provare topanswers.xyz il

Postgres ha PERCENT_RANK ()
Philᵀᴹ

Risposte:


12

Ho escogitato quanto segue:

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;

Seleziona il massimo di ciascun gruppo che viene diviso usando ntile().

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.