mysql帶條件的計數


在網站開發的過程中,經常會用到數據統計功能,因此條件計數查詢便是不可避免的,下面介紹幾種方法來解決此問題。

例(假設):

mysql> select * from count_demo;
+-------+------+-----+
| class | pass | sex |
+-------+------+-----+
|     2 |    1 ||
|     2 |    0 ||
|     1 |    1 ||
|     3 |    1 ||
|     5 |    1 ||
|     4 |    0 ||
|     1 |    0 ||
|     2 |    1 ||
|     6 |    0 ||
+-------+------+-----+

9 rows in set

 

現有統計一個年級某項考試通過記錄表如上(class代表班級,pass表示考試是否通過,1為通過,0為未通過,sex為性別)。

現在需要進行統計,每一個班級通過考試以及沒有通過考試的人數。

 

方法一:使用OR NULL

mysql> select count(pass=1 or null) as pass,count(pass=0 or null) as no_pass,class from count_demo group by class;
+------+---------+-------+
| pass | no_pass | class |
+------+---------+-------+
|    1 |       1 |     1 |
|    2 |       1 |     2 |
|    1 |       0 |     3 |
|    0 |       1 |     4 |
|    1 |       0 |     5 |
|    0 |       1 |     6 |
+------+---------+-------+
6 rows in set

 

其中需要注意的是“or null”的使用,手冊中提到 COUNT(column_name) 函數返回指定列的值的數目(NULL 不計入),那么如果pass不等於1的時候,or null就起作用,讓條件為null,那么count就不會計算pass不為1的值。也即是正確的統計結果。(可自行去掉or null測試一下,得到的結果是錯誤的)


方法二:使用多條select

mysql> select count(pass) as pass,class from count_demo where pass=1 group by class;
+------+-------+
| pass | class |
+------+-------+
|    1 |     1 |
|    2 |     2 |
|    1 |     3 |
|    1 |     5 |
+------+-------+
4 rows in set

 

mysql> select count(pass) as pass,class from count_demo where pass=0 group by class;
+------+-------+
| pass | class |
+------+-------+
|    1 |     1 |
|    1 |     2 |
|    1 |     4 |
|    1 |     6 |
+------+-------+
4 rows in set

這樣很直觀也很簡單,如果統計條件少,建議使用。

 

方法三:使用CASE WHEN

mysql> select count(case when pass=1 then 1 else null end)as pass,count(case when pass=0 then 1 else null end)as no_pass,class 
from count_demo group by class;


+------+---------+-------+
| pass | no_pass | class |
+------+---------+-------+
|    1 |       1 |     1 |
|    2 |       1 |     2 |
|    1 |       0 |     3 |
|    0 |       1 |     4 |
|    1 |       0 |     5 |
|    0 |       1 |     6 |
+------+---------+-------+
6 rows in set

CASE WHEN語句的功能很強大,可以定義靈活的查詢條件,很適合進行分類統計。


免責聲明!

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



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