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才不會統計上這條記錄數。