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


免責聲明!

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



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