count與case when配合使用問題

SELECT COUNT(case when age>15 then scone ELSE 1 end) FROM `t_z_test1`;

SELECT COUNT(case when age>15 then scone ELSE 1 end) FROM `t_z_test1`;

MySQL執行這條sql時會每條記錄的去執行count裏的條件 如果滿足age>15就對當前記錄執行count(scone),不滿足就對當前記錄執行count(1)。

這裏有個注意點就是如果不用case when 而直接加上判斷條件比如:

SELECT COUNT(age>15) FROM `t_z_test1`;這樣無論是true還是false都是統計所有。因爲mysql裏的true或false就是0和1所以這裏也就變成了SELECT COUNT(0) FROM `t_z_test1`或者SELECT COUNT(1) FROM `t_z_test1`.而count(任何數字)的效果都相當於count(*)所以要想這裏生效就得加個or null,比如:SELECT COUNT(0) FROM `t_z_test1`,這樣告訴mysql如果不滿足前面條件就執行count(null)。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章