查询与case语句中位数
问题描述:
如何从表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'关键字,我认为这会很好地工作。再次感谢。 –