1. 程式人生 > 其它 >SQL中的count()函式內加條件

SQL中的count()函式內加條件

最近工作中,有需要新做資料的統計彙總工作,本來一開始打算用Python的pandas庫去資料庫裡統計的,

後來想著能否用一條sql語句解決問題。發現count()函式內可以加條件計數,sql模板如下 :

SELECT
COUNT(1) AS '總數',
COUNT (xjzt = '1' OR NULL) AS '狀態1',
COUNT (xjzt = '2' OR NULL) AS '狀態2'
FROM
t_table
WHERE
sfsc = 0
GROUP BY
'欄位1',
'欄位2'

至於為什麼條件裡要加上 OR NULL,原因如下:

如count(release_year = '2006' or NULL) 這部分 為什麼要加上or NULL 直接count(release_year='2006')有什麼問題嗎?不就是要找release_year = '2006'的資料嗎,為什麼要計算NULL的資料?

因為 當 release_year不是 2006時 ,release_year='2006' 結果false 不是 NULL,Count在 值是NULL是 不統計數, (count('任意內容')都會統計出所有記錄數,因為count只有在遇見null時不計數,即count(null)==0,因此前者單引號內不管輸入什麼值都會統計出所有記錄數)至於加上or NULL , 很像其他程式設計裡的or運算子,第一個表示式是true就是不執行or後面的表示式,第一個表示式是false 執行or後面的表示式 。當release_year不為2006時release_year = '2006' or NULL 的結果是NULL,Count才不會統計上這條記錄數

案例

統計要求:

最終 sql如下:

select 'xx大學' as `平臺`,city_name,col_name,count(1) as '總人數',
count(idcard_status="身份證有效" OR NULL) as '身份證合規',
count(idcard_status="身份證無效" OR NULL) as '身份證不合規',
count(xueshengzheng_satus="學生證有效" OR NULL) as '學生證合規',
count(xueshengzheng_satus="學生證無效" OR NULL) '學生證不合規',
count(xueshengzheng_satus=
"學生證有效"and idcard_status="身份證有效" OR NULL) as '雙證合規', count(xueshengzheng_satus="學生證無效"and idcard_status="身份證無效" OR NULL) as '雙證不合規' from idcard_list_bak_20210714 group by city_name,col_name

參考:

https://blog.csdn.net/JAVA_nihao/article/details/98972263

https://blog.csdn.net/qq_32719287/article/details/79513164