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


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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.