0
如何從表test
其值大於20查詢與case語句中位數
id val
1 5.43
2 106.26
3 14.00
4 39.58
5 27.00
在這種情況下輸出將平均獲得的val
列median
(27.00,39.58,106.26)= 39.58。
我正在使用PostgreSQL數據庫。 任何幫助將不勝感激。
如何從表test
其值大於20查詢與case語句中位數
id val
1 5.43
2 106.26
3 14.00
4 39.58
5 27.00
在這種情況下輸出將平均獲得的val
列median
(27.00,39.58,106.26)= 39.58。
我正在使用PostgreSQL數據庫。 任何幫助將不勝感激。
和PostgreSQL 9.4使用ordered aggregates:
postgres=# SELECT percentile_cont(0.5) WITHIN GROUP (ORDER BY val)
FROM foo WHERE val > 20;
┌─────────────────┐
│ percentile_cont │
╞═════════════════╡
│ 39.58 │
└─────────────────┘
(1 row)
或者一些很現代的語法:
postgres=# SELECT percentile_cont(0.5) WITHIN GROUP (ORDER BY val)
FILTER (WHERE val > 20)
FROM foo;
┌─────────────────┐
│ percentile_cont │
╞═════════════════╡
│ 39.58 │
└─────────────────┘
(1 row)
感謝您的評論。我們可以使用'case'而不是where子句寫一個查詢。我問這個問題的原因是,對於一些值,我必須執行'SUM',對於一些值'AVG'和'MEDIAN'。 –
我沒有注意到你在第二個查詢中使用的'FILTER'關鍵字,我認爲這會很好地工作。再次感謝。 –