Méthode générale rapide pour calculer les centiles

9

Je veux trouver n> 1 centiles d'une colonne non triée dans PostgreSQL. Par exemple, les 20e, 40e, 60e, 80e et 100e centiles.

Une solution évidente consiste à compter et à trier la colonne, puis à y jeter un œil, mais j'espère une meilleure solution. Des idées?

PS J'ai trouvé une bonne solution pour MySQL mais je ne peux pas la traduire en psql

Bob Jansen
la source
2
Avez-vous pensé aux fonctions de fenêtrage , par exemple cume_dist ()?
Jack dit d'essayer topanswers.xyz le
Postgres a PERCENT_RANK ()
Philᵀᴹ

Réponses:

12

J'ai trouvé ce qui suit:

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;

Il sélectionne le maximum de chaque groupe divisé en utilisant ntile().

Bob Jansen
la source