摘要:在本教學中,您將學習如何使用 SQL COUNT 函數來取得群組中項目的數量。
SQL COUNT 函數簡介
SQL COUNT
函數是一個彙總函數,它會傳回查詢所傳回的列數。您可以在 SELECT 陳述式中使用 COUNT
函數來取得員工數、每個部門的員工數、擔任特定工作的員工數等等。
以下說明 SQL COUNT
函數的語法
COUNT([ALL | DISTINCT] expression);
Code language: SQL (Structured Query Language) (sql)
COUNT
函數的結果取決於您傳遞給它的引數。
ALL
關鍵字會在結果中包含重複的值。例如,如果您有一個群組 (1, 2, 3, 3, 4, 4) 並套用COUNT
函數,則結果為 6。預設情況下,無論您是否指定,COUNT
函數都會使用ALL
關鍵字。DISTINCT
關鍵字只會計算唯一值。例如,如果您將COUNT
函數套用至群組 (1, 2, 3, 3, 4, 4),則該函數會傳回 4。- 運算式是您要計算值的表格欄位。
COUNT
函數的另一種形式是接受星號 (*) 作為引數,如下所示
COUNT(*)
Code language: SQL (Structured Query Language) (sql)
COUNT(*)
函數會傳回查詢中表格的列數。它會計算重複的列和包含 null 值的列。
SQL COUNT 函數範例
讓我們看一些範例,看看 COUNT
函數如何運作。我們將在範例資料庫中使用 employees
表格來進行示範

SQL COUNT(*) 範例
下列範例使用 COUNT(*)
函數來取得 employees
表格的列數
SELECT
COUNT(*)
FROM
employees;
Code language: SQL (Structured Query Language) (sql)
下列範例使用 COUNT(*)
函數來計算在部門 ID 為 6 的部門工作的員工數
SELECT
COUNT(*)
FROM
employees
WHERE
department_id = 6;
Code language: SQL (Structured Query Language) (sql)
在此範例中
- 首先,
WHERE
子句會篩選出部門 ID 為 6 的部門。 - 其次,
COUNT(*)
函數會傳回employees
表格中部門 ID 為 6 的列數。
下列範例使用 COUNT(*)
函數來取得職務 ID 為 9 的員工數
SELECT
COUNT(*)
FROM
employees
WHERE
job_id = 9;
Code language: SQL (Structured Query Language) (sql)
運作方式。
- 首先,
WHERE
子句會包含employees
表格中職務 ID 為 9 的列。 - 其次,
COUNT(*)
會傳回employees
表格中職務 ID 為 9 的列數
下列範例使用 AS 關鍵字來為 COUNT(*)
指定一個欄位別名
SELECT
COUNT(*) as employee_count
FROM
employees
WHERE
job_id = 9;
Code language: JavaScript (javascript)
SQL COUNT 與 GROUP BY 子句範例
下列範例將 COUNT
函數與 GROUP BY 子句搭配使用,以尋找每個部門的員工數
SELECT
department_id,
COUNT(*)
FROM
employees
GROUP BY
department_id;
Code language: SQL (Structured Query Language) (sql)

運作方式
- 首先,
GROUP BY
子句會依部門 ID 將employees
表格中的列分組。 - 其次,
COUNT(*)
函數會傳回每個群組的列數
下列範例使用 COUNT(*)
函數來取得每個部門的員工數。此外,它還使用 INNER JOIN
子句在結果集中包含部門名稱
SELECT
e.department_id,
department_name,
COUNT(*)
FROM
employees e
INNER JOIN departments d
ON d.department_id = e.department_id
GROUP BY
e.department_id,
department_name;
Code language: SQL (Structured Query Language) (sql)

SQL COUNT(*) 與 ORDER BY 子句範例
下列範例使用 ORDER BY 子句來依部門排序員工數
SELECT
e.department_id,
department_name,
COUNT(*)
FROM
employees e
INNER JOIN departments d ON d.department_id = e.department_id
GROUP BY
e.department_id
ORDER BY
COUNT(*) DESC;
Code language: SQL (Structured Query Language) (sql)

SQL COUNT 與 HAVING 子句範例
下列範例會傳回每個部門的員工數。此外,它還使用 HAVING
子句來僅選取員工數超過五個的部門
SELECT
e.department_id,
department_name,
COUNT(*)
FROM
employees e
INNER JOIN departments d ON d.department_id = e.department_id
GROUP BY
e.department_id
HAVING
COUNT(*) > 5
ORDER BY
COUNT(*) DESC;
Code language: SQL (Structured Query Language) (sql)

SQL COUNT(DISTINCT 運算式) 範例
下列範例使用 COUNT
來取得 employees
表格中 job_id
欄位的值的數量
SELECT
COUNT(job_id)
FROM
employees;
Code language: SQL (Structured Query Language) (sql)

查詢會傳回 40,其中包含重複的值。若要移除重複項,您可以將 DISTINCT
關鍵字新增至 COUNT
函數,如下所示
SELECT
COUNT(DISTINCT job_id)
FROM
employees;

下列範例將 COUNT
函數與 DISTINCT
關鍵字搭配使用,以取得經理人數
SELECT
COUNT(DISTINCT manager_id)
FROM
employees;
Code language: SQL (Structured Query Language) (sql)

摘要
COUNT
函數會傳回群組中的列數。ALL
關鍵字會包含重複的值,而DISTINCT
關鍵字會移除結果中的重複值。COUNT(*)
會傳回查詢中的列數,包括重複的列和包含 null 值的列。