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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM