web-dev-qa-db-ja.com

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

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

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

追伸MySQLに適切な solution を見つけましたが、psqlに変換できません

9
Bob Jansen

私は次のことを考え出しました:

_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() を使用して分割された各グループの最大値を選択します。

12
Bob Jansen