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 的用法
在資料庫中,經常會出現相同的值被重複儲存的情況。這時可以將 DISTINCT 與 COUNT 結合使用,來取得不重複的唯一值數量。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 BY 與 COUNT 的範例
以下查詢會計算每個部門的人數:
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;

