SQL COUNT +Case When Then+IFNULL多條件判斷實現多條件複雜統計
阿新 • • 發佈:2019-01-23
基礎知識
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