用case语句查询中位数

时间:2016-06-13 06:29:52

标签: postgresql

如何从表median中获取值{20}的val列的test

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

在这种情况下,输出将是中位数(27.00,39.58,106.26)= 39.58。

我正在使用PostgreSQL数据库。 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分: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)