• 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

    转载自: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

    人生得意须尽欢,莫使金樽空对月.
  • 相关阅读:
    Oracle查询语句中指定索引时优化器及指定索引不好使的处理方法
    oracle 死锁处理
    ORACLE里锁的几种模式
    oracle rpad()函数
    Oracle JOB
    Oracle 函数取汉字的拼音首字母
    COM 组件注册方法
    oracle 创建一个用户,只能访问指定的对象
    SOAP和WSDL的一些必要知识
    【转】net.sf.json.JSONException: java.lang.reflect.InvocationTargetException
  • 原文地址:https://www.cnblogs.com/luojie-/p/14384174.html
Copyright © 2020-2023  润新知