SQL COUNT +Case When Then+IFNULL多条件判断实现多条件复杂统计

基础知识
COUNT()函数


        函数返回匹配指定条件的行数。

SQL COUNT() 语法
 

1、SQL COUNT(column_name)语法

COUNT(column_name)函数返回指定列的值的数目(NULL 不计入):
            SELECT COUNT(column_name) FROM table_nam

2、SQL COUNT(*)语法

COUNT(*)函数返回表中的记录数:
            SELECT COUNT(*) FROM table_name

3、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



原文链接:SQL COUNT +Case When Then+IFNULL多条件判断实现多条件复杂统计

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值