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 次 |
| 最近记录: |