パーセンタイルを計算するための高速な一般的な方法


9

PostgreSQLでソートされていない列のn> 1パーセンタイルを検索したい。たとえば、20、40、60、80、100パーセンタイル。

明白な解決策は、列を数えて並べ替えてから調べますが、もっと良い解決策を期待しています。何か案は?

PS私はMySQLの良い解決策を見つけましたが、それをpsqlに変換できません


2
たとえば、cume_dist()などのウィンドウ関数を検討しましたか?
ジャックはtopanswers.xyzしようと言う

Postgresは()PERCENT_RANKあり
Philᵀᴹ

回答:


12

私は以下を思いつきました:

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;

を使用して分割された各グループの最大値を選択しntile()ます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.