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


1. SQL語句中的count()函數內加條件

有需要新做頁面統計數據總數,於是就按照條件規矩的分組查詢,先查出總數,然后對分組過后的數據進行單個查詢。

於是,在網上搜了一下,count()函數內能不能加條件計數,測試了一下,數據正確,sql如下 :

SELECT left(date, 4) as semester_year, 
ifnull(count(type='論文' or null), 0) as '論文數', 
ifnull(count(type='著作權' or null), 0) as '專著數', 
ifnull(count(type='專利' or null), 01) as '專利數'
FROM research_topics_achievements 
where date is not null 
GROUP BY left(date, 4)

測試結果:

2. 為什么條件里要加上 OR NULL,原因如下

如 count(semester_year = '2016' OR NULL) ,這部分為什么要加上 OR NULL ,直接 count(semester_year ='2006') 有什么問題嗎?

不就是要找 semester_year = '2006' 的數據嗎,為什么要計算 NULL 的數據 ?

1. 因為當 semester_year 不是 2006時 ,semester_year = '2006' 結果false,不是 NULL,Count在值是NULL的時候是不統計個數的,(count('任意內容') 都會統計出所有記錄數,因為count只有在

遇見null時不計數,即count(null)==0,

2. 因此前者單引號內不管輸入什么值都會統計出所有記錄數,至於加上 OR NULL , 很像其他編程里的or運算符,第一個表達式是true就是不執行or后面的表達式,第一個表達式是false 執行or后面的表達式 。

3. 當 semester_year 不為2006時,semester_year = '2006' OR NULL 的結果是NULL,Count才不會統計上這條記錄數。


免責聲明!

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



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