SQL 按名称查询包含许多按状态计数的列的报告
SQL query for report by name with many columns count by status
是否可以通过 sql 查询生成按名称按状态计数的报告组。
表格:
- 项目(id,名称,status_id,service_id)
- 状态(身份证、姓名)
- 服务(id,名称)
我要举报,按状态分组按服务统计:
列结果:服务名称、状态名称 1、状态名称 2、状态名称 3、总计
行结果:
service name 1, 30, 10, 20, 60
service name 2, 10, 5, 40, 55
service name 3, 0, 2, 8, 10
您似乎需要连接和条件聚合:
select se.name as service_name,
sum(case when st.name = 'status 1' then 1 else 0 end) as cnt_status_1,
sum(case when st.name = 'status 2' then 1 else 0 end) as cnt_status_2,
sum(case when st.name = 'status 3' then 1 else 0 end) as cnt_status_3,
count(*) as total
from project p
inner join status st on st.id = p.status_id
inner join service se on se.id = p.service_id
group by se.id, se.name
是否可以通过 sql 查询生成按名称按状态计数的报告组。
表格:
- 项目(id,名称,status_id,service_id)
- 状态(身份证、姓名)
- 服务(id,名称)
我要举报,按状态分组按服务统计:
列结果:服务名称、状态名称 1、状态名称 2、状态名称 3、总计
行结果:
service name 1, 30, 10, 20, 60
service name 2, 10, 5, 40, 55
service name 3, 0, 2, 8, 10
您似乎需要连接和条件聚合:
select se.name as service_name,
sum(case when st.name = 'status 1' then 1 else 0 end) as cnt_status_1,
sum(case when st.name = 'status 2' then 1 else 0 end) as cnt_status_2,
sum(case when st.name = 'status 3' then 1 else 0 end) as cnt_status_3,
count(*) as total
from project p
inner join status st on st.id = p.status_id
inner join service se on se.id = p.service_id
group by se.id, se.name