2016-09-25 6 views
0

ウィンドウ関数を使用して、データのサブセット全体で平均、合計、最小、および最大を得ることができます。しかし、ウィンドウ関数を使った平均の代わりに、中央値、つまり25パーセンタイルを得ることは可能ですか?ウィンドウ関数を使用したパーセンテージ計算

これは、平均ではなく各地区内のIDと25パーセンタイルまたは50パーセンタイルの販売数を得るためにこれを書き直すにはどうすればよいですか?

SELECT id, avg(sales) 
    OVER (PARTITION BY district) AS district_average 
FROM t 

答えて

5

あなたはpercentile_cont()またはpercentile_disc()を使用して集計関数としてこれを書くことができます。

select district, percentile_cont(0.25) within group (order by sales) 
from t 
group by district; 

残念ながら、Postgresは、現在のウィンドウ関数としてこれらをサポートしていません。

select id, percentile_cont(0.25) within group (order by sales) over (partition by district) 
from t; 

ので、 joinを使用できます。

select t.*, p_25, p_75 
from t join 
    (select district, 
      percentile_cont(0.25) within group (order by sales) as p_25, 
      percentile_cont(0.75) within group (order by sales) as p_75 
     from t 
     group by district 
    ) td 
    on t.district = td.district 
+0

私はこれを行うと、私は次のエラーを取得する: OVERは、私はPostgresの9.5を持っている、と私はそれが9.4でサポートされているになったと思ったので、奇妙で注文したセットの集計PERCENTILE_CONT ...サポートされていませんか? –

+1

@StephenSmith。 。 。ドキュメントは注意深く読んでください - パーセンタイル関数は集計関数であり、ウィンドウ関数ではないことは明らかです。 –

関連する問題