2016-06-13 107 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'关键字,我认为这会很好地工作。再次感谢。 –