MySQL——case when 的用法,纵向统计数据-类似数据透视表
Posted 叶不修233
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL——case when 的用法,纵向统计数据-类似数据透视表相关的知识,希望对你有一定的参考价值。
mysql——case when 的用法,纵向统计数据-类似数据透视表
一、查询所有单位的主办事项和协办事项数量
(1)原始数据
单位表:
事项分配表:
每个事项有一个主办单位和多个协办单位。
(2)目标数据
查询所有单位的主办事项和协办事项数量(主办:host;协办:help)
(3)sql语句
-- 查询所有单位的主办和协办数量
SELECT
sxfp.sxfp_deptid 单位id,
dept.d_name 单位名称,
sum(case when sxfp_type='主办' then 1 else 0 end) host ,
sum(case when sxfp_type='协办' then 1 else 0 end) help
FROM
tb_sxfp sxfp
JOIN tb_dept dept ON sxfp.sxfp_deptid = dept.d_id
GROUP BY
sxfp.sxfp_deptid;
二、查询每个督办单进度百分比,同时关联督办单表获取督办单名
(1)原始数据
督办单表:(每个督办单可以对应多个事项状态)
督办单-事项表:(事项状态3为已完成)
(2)目标数据
查询每个督办单进度百分比,同时关联督办单表获取督办单名
(3)sql语句
-- 查询每个督办单进度百分比,同时关联督办单表获取督办单名
select a.dbsx_id 督办单id,b.db_name 督办单名,a.rate 督办单对应事项完成进度百分比
from
(
select tb_dbsx.dbsx_id,
TRUNCATE(sum(case when dbsx_statusid=3 then 1 else 0 end)/
count(dbsx_statusid)*100,2)
rate
from tb_dbsx
left join tb_db
on tb_dbsx.dbsx_sxid=tb_db.db_id
group by dbsx_id
) a
left join tb_db b
on a.dbsx_id=b.db_id
以上是关于MySQL——case when 的用法,纵向统计数据-类似数据透视表的主要内容,如果未能解决你的问题,请参考以下文章