2016-08-24 6 views
4

私はPostgresで新しいpercentile_contを使用して、それが開始されて以来ずっとテーブルのパーセンタイルを計算してきました。ただし、各行にカーディナリティーを含めるように表を変更していますが、これを考慮に入れてpercentile_contを実装する方法は不明です。単純に使用して行われることになるセットに年齢のための85パーセンタイルを計算カーディナリティを使用したPostgres percentile_cont

+--------+--------------+ 
| name | age   | 
+--------+--------------+ 
| Joe | 10   | 
+--------+--------------+ 
| Bob | 11   | 
+--------+--------------+ 
| Lisa | 12   | 
+--------+--------------+ 

さんが言ってみましょう表は前にこのように見えた今percentile_cont(0.85) WITHIN group (ORDER BY age asc) 85

、我々は(名前ごとにカーディナリティを持っていますその特定の名前の人の数)。

+--------------+--------+ 
| name | age | count | 
+--------+-----+--------+ 
| Joe | 10 | 2 | 
+--------+-----+--------+ 
| Bob | 11 | 1 | 
+--------+-----+--------+ 
| Lisa | 12 | 1 | 
+--------+-----+--------+ 

口座に数/カーディナリティを取っパーセンタイルを計算するためにはPostgresに機能内蔵のPERCENTILE_CONTまたはその他を使用するためにどのような方法があります:それは次のようになりますか?

答えて

0

最も明白な解決策は、countに従って行を複製することです。

例データ:

create table a_table (name text, age int, count int); 
insert into a_table values 
    ('Joe', 10, 3), 
    ('Bob', 11, 2), 
    ('Lisa', 12, 1); 

問合せ:

with recursive data (name, age, count) as (
    select * 
    from a_table 
union all 
    select name, age, count- 1 
    from data 
    where count > 1 
    ) 
select name, age 
from data 
order by 1, 2; 

name | age 
------+----- 
Bob | 11 
Bob | 11 
Joe | 10 
Joe | 10 
Joe | 10 
Lisa | 12 
(6 rows) 
関連する問題