2016-06-13 108 views
0

如何從表test其值大於20查詢與case語句中位數

id  val 
1   5.43 
2   106.26 
3   14.00 
4   39.58 
5   27.00 

在這種情況下輸出將平均獲得的valmedian(27.00,39.58,106.26)= 39.58。

我正在使用PostgreSQL數據庫。 任何幫助將不勝感激。

回答

0

和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) 
+0

感謝您的評論。我們可以使用'case'而不是where子句寫一個查詢。我問這個問題的原因是,對於一些值,我必須執行'SUM',對於一些值'AVG'和'MEDIAN'。 –

+0

我沒有注意到你在第二個查詢中使用的'FILTER'關鍵字,我認爲這會很好地工作。再次感謝。 –