MySQL COUNT 函式教學:用法、DISTINCT、GROUP BY 與實用範例完整解析

1. MySQL COUNT 函式概述

在 MySQL 中,COUNT 函式是一個非常實用的工具,用來取得符合指定欄位或條件的資料筆數。透過這個函式,可以輕鬆計算資料庫中某些特定紀錄的數量。例如,可以計算全部紀錄的數量,或是根據特定條件來計算符合的紀錄數。

COUNT() 函式的基本語法

基本的 COUNT 用法如下:

SELECT COUNT(*) FROM table_name;

這個查詢會計算指定資料表中的所有紀錄數。如果只想計算特定欄位的資料數,可以這樣寫:

SELECT COUNT(column_name) FROM table_name;

在這種情況下,如果指定的欄位中包含 NULL 值,那些 NULL 將會被忽略,不會被計算在內。

忽略 NULL 值的範例

例如,如果 age 欄位儲存使用者年齡,並且其中包含 NULL 值,可以使用以下查詢來排除 NULL

SELECT COUNT(age) FROM users WHERE age IS NOT NULL;

這個查詢只會計算 age 欄位中非 NULL 的值。

2. COUNT 搭配 DISTINCT 的用法

在資料庫中,經常會出現相同的值被重複儲存的情況。這時可以將 DISTINCTCOUNT 結合使用,來取得不重複的唯一值數量。DISTINCT 會從結果集中排除重複的資料後再進行計算。

COUNT 搭配 DISTINCT 的範例

以下查詢會計算 name 欄位中不重複的名稱數量:

SELECT COUNT(DISTINCT name) FROM users;

例如,即使 users 資料表中有多筆 “taro”,也只會被計算一次。

3. 使用 WHERE 條件的計數

COUNT 函式可以與 WHERE 條件結合,只計算符合特定條件的紀錄數。這在需要取得符合某些條件的資料時非常有用。

指定條件的計數範例

以下查詢會計算年齡大於等於 25 歲的使用者數量:

SELECT COUNT(*) FROM users WHERE age >= 25;

這個查詢會回傳 users 資料表中,age 欄位大於等於 25 的筆數。

COUNT 的進階應用

同樣可以結合多個條件來計算。例如,要計算 age 大於等於 25 且 gender 為 ‘Male’ 的使用者數:

SELECT COUNT(*) FROM users WHERE age >= 25 AND gender = 'Male';

這個查詢會回傳符合多個條件的資料數。

4. 使用 GROUP BY 進行分組計數

透過 GROUP BY 可以依據特定欄位進行分組,並對每個群組分別計算筆數。這在需要統計例如各部門人數時非常實用。

GROUP BYCOUNT 的範例

以下查詢會計算每個部門的人數:

SELECT department, COUNT(*) FROM employees GROUP BY department;

結果會回傳各部門的人數,GROUP BY 會依 department 欄位分組,再對每組資料計算筆數。

5. 使用 IF 條件的計數

COUNT 可以搭配 IF 條件來進行更靈活的計算。例如,根據不同條件來設定計數方式:

IF 條件計數範例

以下查詢會計算薪資超過 50,000 的員工數:

SELECT COUNT(IF(salary > 50000, 1, NULL)) FROM employees;

這個查詢只會計算 salary 大於 50,000 的紀錄。IF 條件會在符合時回傳 1,不符合時回傳 NULL

6. COUNT 函式的實務應用

COUNT 在日常的資料庫管理中非常常見,例如用於統計使用者數或銷售紀錄數,來確保資料正確性。

應用範例1:計算使用者註冊數

網站管理者通常需要知道目前的註冊用戶數,可以使用以下查詢:

SELECT COUNT(*) FROM users;

這會回傳 users 資料表中的總筆數,也就是目前的註冊人數。

應用範例2:計算銷售資料

若要知道某商品的銷售次數,可以使用以下查詢:

SELECT COUNT(*) FROM sales WHERE product_id = 123;

這個查詢會計算 product_id 為 123 的銷售紀錄數。

7. COUNT 函式常見問題與排解

在使用 COUNT 時,可能會遇到處理 NULL 或重複資料的問題。為避免這些狀況,需要了解一些解決方法。

NULL 資料的問題與解決方式

當使用 COUNT(column_name) 時,NULL 值不會被計算。如果要計算所有紀錄,建議使用 COUNT(*)。若要排除 NULL,可以加上 IS NOT NULL 條件:

SELECT COUNT(column_name) FROM table_name WHERE column_name IS NOT NULL;