Abd*_*ani 6 postgresql aggregate postgresql-9.1 aggregate-filter
我有一个main
包含以下行的表:
id | name | rank
----+--------+------
1 | Ali | a
2 | Sami | b
3 | Khan | c
4 | Kamran | d
5 | Imran | e
6 | Asad | a
7 | Nawid | v
8 | Jamil | c
9 | Usman | j
Run Code Online (Sandbox Code Playgroud)
我想计算 column 中具有某些值的行rank
。例如,我想按如下方式对值进行分组:
(a,b,v)
应按名称归入一组myvalues
。(c,d,j)
应该按名称出现在另一个组中yourvalues
。(e)
应该通过 name 到达另一个组extravalues
。我想要的结果:
myvalues | yourvalues | extravalues
4 | 4 | 1
Run Code Online (Sandbox Code Playgroud)
myvalues
计数为 4,因为它由 (a,b,v) 组成。a 出现 2 次,b 出现 1 次,v 出现 1 次 - 总共 4 次
。yourvalues
由 (c,d,j) 组成的情况也是如此,这些值的出现总共为 4。
并且最后一组extravalues
由 (e) 组成,仅计算 1 行。
FILTER
在 Postgres 9.4+ 中使用聚合子句:
SELECT count(*) FILTER (WHERE rank = ANY ('{a,b,v}')) AS myvalues
, count(*) FILTER (WHERE rank = ANY ('{c,d,j}')) AS yourvalues
, count(*) FILTER (WHERE rank = 'e') AS extravalues
FROM main;
Run Code Online (Sandbox Code Playgroud)
旧版本的详细信息和替代方案:
归档时间: |
|
查看次数: |
8136 次 |
最近记录: |