我的数据库中有以下表格和虚构记录。
id | name | status | clientid
1 | John Doe | 4 | 200
2 | Jane Doe | 2 | 400
3 | John Doe | 4 | 200
4 | Mike Smith | 4 | 300
5 | Mike Smith | 2 | 300
6 | Jane Doe | 4 | 400
7 | Jane Doe | 4 | 400
我想要做的是检索所有记录,按clientid
分组并显示一些状态
对于那些记录。例如,我想知道有多少状态clientid
400设置为状态2
以及状态4
中有多少状态。
所以我想要一个看起来像这样的输出:
id | name | clientid | status_2 | status_4
1 | John Doe | 200 | 0 | 2
2 | Mike Smith | 300 | 1 | 1
3 | Jane Doe | 400 | 1 | 2
但我无法弄清楚如何得到这个。当我做GROUP BY
时,我无法显示他们的名字。当我做LEFT JOIN
时,我会回到许多记录等。
我应该如何构建查询以获得如上所示的结果?
答案 0 :(得分:3)
select name,
clientid,
sum(case when status = 2 then 1 end) as status_2,
sum(case when status = 4 then 1 end) as status_4
from your_table
group by name,
clientid
答案 1 :(得分:1)
简单的部分是条件聚合。如果你真的想要id
增量,那么你可以使用dense_rank()
:
select dense_rank() over (order by min(id)) as id,
name, clientid,
sum(case when status = 2 then 1 else 0 end) as status_2,
sum(case when status = 4 then 1 else 0 end) as status_4
from table t
group by name, clientid;