SQL COUNT +Case When Then+IFNULL多条件判断实现多条件复杂统计
基础知识
COUNT()函数
函数返回匹配指定条件的行数。
SQL COUNT() 语法
- SQL COUNT(column_name) 语法
COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入):SELECT COUNT(column_name) FROM table_nam
- SQL COUNT(*) 语法
COUNT(*) 函数返回表中的记录数:SELECT COUNT(*) FROM table_name
- SQL COUNT(DISTINCT column_name) 语法
COUNT(DISTINCT column_name) 函数返回指定列的不同值的数目:SELECT COUNT(DISTINCT column_name) FROM table_name
Case When Then
Case具有两种格式。简单Case函数和Case搜索函数。
第一种 格式 : 简单Case函数 :
格式说明
case 列名
when 条件值1 then 选择项1
when 条件值2 then 选项2…….
else 默认值 end
例:
select case job_level when '1' then '1111' when '2' then '222' when '3' then '333' else 'eee' end from dbo.employee
第二种 格式 :Case搜索函数
格式说明
case
when 列名= 条件值1 then 选择项1
when 列名=条件值2 then 选项2…….
else 默认值 end
例如:
update employee set e_wage = case when job_level = '1' then e_wage*1 when job_level = '2' then e_wage*2 when job_level = '3' then e_wage*3 else e_wage*4 end
IFNULL函数用法
MySQL IFNULL函数是MySQL控制流函数之一,它接受两个参数,如果不是NULL,则返回第一个参数。 否则,IFNULL函数返回第二个参数。
两个参数可以是文字值或表达式。
以下说明了IFNULL函数的语法:IFNULL(expression_1,expression_2);
如果expression_1不为NULL,则IFNULL函数返回expression_1; 否则返回expression_2的结果。
例
复杂统计
我们有一个复杂的统计,统计出各单位以各种方式办理的案件的案件
danban形式CHECKOPTION=’danban’,单位id为UNDERTAKEUNITID
huiban形式包含zhuban和xieban
COUNDERTAKEUNITID为xieban单位id
UNDERTAKEUNITID为zhuban的id
fenban形式c.CHECKOPTION=’fenban’ ,单位id为UNDERTAKEUNITID
我们要统计出
办理单位统计
SELECT c.unitid,c.unit, COUNT(CASE WHEN c.CHECKOPTION='danban' then 1 else NULL END) as danban, COUNT(CASE WHEN c.CHECKOPTION='huiban' and c.COUNDERTAKEUNITID is not NULL then 1 else NULL END) as xieban, COUNT(CASE WHEN c.CHECKOPTION='huiban' and c.UNDERTAKEUNITID is not NULL then 1 else NULL END) as zhuban, COUNT(CASE WHEN c.CHECKOPTION='fenban' then 1 else NULL END) as fenban from ( SELECT a.UNDERTAKEUNIT,a.UNDERTAKEUNITID,a.COUNDERTAKEUNIT,a.COUNDERTAKEUNITID,a.CHECKOPTION, IFNULL(a.COUNDERTAKEUNITID,a.UNDERTAKEUNITID) as unitid, IFNULL(a.COUNDERTAKEUNIT,a.UNDERTAKEUNIT)as unit FROM unit_undertakeinfo a ) c GROUP BY c.unitid
转载自:https://blog.csdn.net/u010121228/article/details/79895076?utm_medium=distribute.pc_relevant.none-task-blog-OPENSEARCH-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-2.control