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 的用法,纵向统计数据-类似数据透视表的主要内容,如果未能解决你的问题,请参考以下文章

SQL之case when then用法(用于分类统计)

SQL之case when then用法(用于分类统计)

MYSQL case when 的两种用法

casewhen能用并且吗

MySQL Case When 用法

mysql中case when的用法