首頁 > 軟體

Mysql中使用count加條件統計的實現範例

2022-07-29 22:06:30

前言

最近發現在處理Mysql問題時,count()函數頻繁上鏡,常常出現在分組統計的情景下,但是有時候並不是使用group by分好組就可以直接統計了,比如說一個常見的需求,統計每個班級男生所佔的比例,這種情況一般會按照班級分組,但是分組內不但要統計班級的人數,還要統計男生的人數,也就是說統計是有條件的,之前確實沒有考慮過怎樣實心,後來查詢了資料,總結在這裡,方便日後查詢使用。

Mysql中count()函數的一般用法是統計欄位非空的記錄數,所以可以利用這個特點來進行條件統計,注意這裡如果欄位是NULL就不會統計,但是false是會被統計到的,記住這一點,我們接下來看看幾種常見的條件統計寫法。

測試環境

Windows 10
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 7
Server version: 5.7.21-log MySQL Community Server (GPL)
Copyright © 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.
Type ‘help;’ or ‘h’ for help. Type ‘c’ to clear the current input statement.

準備工作

新建一個Mysql資料表a,包含id和num兩個欄位

mysql> create table a(id int, num int);
Query OK, 0 rows affected (0.04 sec)

插入測試資料,為了看count()函數的效果,我們插入兩個空資料

mysql> insert into a values (1,100),(2,200),(3,300),(4,300),(8,null),(9,null);
Query OK, 6 rows affected (0.01 sec)
Records: 6  Duplicates: 0  Warnings: 0

查詢表a中的資料,與後面的統計做比較

mysql> select * from a;
+----+------+
| id | num  |
+----+------+
|  1 |  100 |
|  2 |  200 |
|  3 |  300 |
|  4 |  300 |
|  8 | NULL |
|  9 | NULL |
+----+------+
6 rows in set (0.09 sec)

呼叫count()函數看效果,如果使用count(*)會查詢出所有的記錄數,但如果使用count(num)發現只有4條資料,num為NULL的記錄並沒有統計上

mysql> select count(*) from a;
+----------+
| count(*) |
+----------+
|        6 |
+----------+
1 row in set (0.03 sec)

mysql> select count(num) from a;
+------------+
| count(num) |
+------------+
|          4 |
+------------+
1 row in set (0.04 sec)

條件統計

count()函數中使用條件表示式加or null來實現,作用就是當條件不滿足時,函數變成了count(null)不會統計數量

mysql> select count(num > 200 or null) from a;
+--------------------------+
| count(num > 200 or null) |
+--------------------------+
|                        2 |
+--------------------------+
1 row in set (0.22 sec)

count()函數中使用if表示式來實現,當條件滿足是表示式的值為非空,條件不滿足時表示式值為NULL;

mysql> select count(if(num > 200, 1, null)) from a;
+-------------------------------+
| count(if(num > 200, 1, null)) |
+-------------------------------+
|                             2 |
+-------------------------------+
1 row in set (0.05 sec)

count()函數中使用case when表示式來實現,當條件滿足是表示式的結果為非空,條件不滿足時無結果預設為NULL;

mysql> select count(case when num > 200 then 1 end) from a;
+---------------------------------------+
| count(case when num > 200 then 1 end) |
+---------------------------------------+
|                                     2 |
+---------------------------------------+
1 row in set (0.07 sec)

總結

使用count()函數實現條件統計的基礎是對於值為NULL的記錄不計數,常用的有以下三種方式,假設統計num大於200的記錄

  • select count(num > 200 or null) from a;
  • select count(if(num > 200, 1, null)) from a
  • select count(case when num > 200 then 1 end) from a

到此這篇關於Mysql中使用count加條件統計的實現範例的文章就介紹到這了,更多相關Mysql count條件統計內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com