MySQL中分组某列,并且统计每行数据对应每个属性值的数量
功能需求
在A表中,包含了作业单位,和作业类型两个属性:
其中 单位单位不固定,动态添加;
作业类型固定:12种;
需求:
统计出每个单位对应得12种作业类型的记录条数。
如图:(因涉及私密,所以模糊处理。)
代码实现
方法1、使用 SUM的方式实现
思路:1.先对作业单位进行分组,GROUP BY。
2、其次对作业类型每一种进行查询,并使用SUM统计数量,使用IF充当过滤条件
SELECT Applicant,
SUM(OperationTypeName='动火作业') AS A1,
SUM(OperationTypeName='动土作业') AS A2,
SUM(OperationTypeName='临时用电') AS A3,
SUM(OperationTypeName='高处作业') AS A4,
SUM(OperationTypeName='11') AS A5,
SUM(OperationTypeName='dd') AS A6,
SUM(OperationTypeName='ee') AS A7,
SUM(OperationTypeName='ff') AS A8,
SUM(OperationTypeName='yy') AS A9
FROM t_sep_zyxk_jc
WHERE DeleteFlg=0
GROUP BY Applicant
查询结果
类比需求图,将结果封装返回即可。
方法2、使用 COUNT的方式实现
思路:实现方式跟上面一样,将SUM换成COUNT即可
SELECT Applicant,
COUNT(OperationTypeName='动火作业') AS A1,
COUNT(OperationTypeName='动土作业') AS A2,
COUNT(OperationTypeName='临时用电') AS A3,
COUNT(OperationTypeName='高处作业') AS A4,
COUNT(OperationTypeName='11') AS A5,
COUNT(OperationTypeName='dd') AS A6,
COUNT(OperationTypeName='ee') AS A7,
COUNT(OperationTypeName='ff') AS A8,
COUNT(OperationTypeName='yy') AS A9
FROM t_sep_zyxk_jc
WHERE DeleteFlg=0
GROUP BY Applicant
方法3、使用SUM+IF的方式实现
SELECT Applicant,
SUM(IF(OperationTypeName='动火作业',1,0)) AS A1,
SUM(IF(OperationTypeName='动土作业',1,0)) AS A2,
SUM(IF(OperationTypeName='临时用电',1,0)) AS A3,
SUM(IF(OperationTypeName='高处作业',1,0)) AS A4,
SUM(IF(OperationTypeName='动火作业',1,0)) AS A5,
SUM(IF(OperationTypeName='动火作业',1,0)) AS A6,
SUM(IF(OperationTypeName='动火作业',1,0)) AS A7,
SUM(IF(OperationTypeName='动火作业',1,0)) AS A8,
SUM(OperationTypeName is not null) AS '总和'
FROM t_sep_zyxk_jc
WHERE DeleteFlg=0
GROUP BY Applicant;