SQL Count()函數

本教程將向您展示如何使用SQL COUNT函數來獲取組中的項目數。

1. SQL COUNT函數簡介

SQL COUNT函數是一個聚合函數,它返回符合條件行數。 可以使用SELECT語句中的COUNT函數來獲取員工數量,每個部門的員工數量,指定工作崗位的員工數量等。

以下是SQL COUNT函數的語法:

COUNTC ([ALL | DISTINCT] expression);

COUNT函數的結果取決於傳遞給它的參數。

  • 默認情況下,COUNT函數使用ALL關鍵字,無論是否指定它。 ALL關鍵字表示考慮組中的所有項目,包括重複值。 例如,如果有一個數據集合(1,2,3,3,4,4)並應用COUNT函數,則結果爲6

  • 如果明確指定DISTINCT關鍵字,則僅考慮唯一的非NULL值。 如果將COUNT函數應用於數據集(1,2,3,3,4,4),則COUNT函數返回4

另一種形式的COUNT函數接受星號(*)作爲參數如下:

COUNT(*)

COUNT(*)函數返回表中的行數,包括包含NULL值的行。

2. SQL COUNT函數示例

下面舉一些例子來看看COUNT函數是如何工作的。將使用示例數據庫中的employees表進行演示。

2.1. SQL COUNT(*)示例

要獲取employees表中的行數,請使用COUNT(*)函數,如下所示:

SELECT 
    COUNT(*)
FROM
    employees;

執行上面查詢語句,得到以下結果:

+----------+
| COUNT(*) |
+----------+
|       40 |
+----------+
1 row in set

要查找在部門ID爲 6 中工作的員工數量,請將WHERE子句添加到查詢中,如下所示:

SELECT 
    COUNT(*)
FROM
    employees
WHERE
    department_id = 6;

執行上面查詢語句,得到以下結果:

+----------+
| COUNT(*) |
+----------+
|        5 |
+----------+
1 row in set

同樣,要查詢工作崗位ID爲9的員工數量,請使用以下語句:

SELECT 
    COUNT(*)
FROM
    employees
WHERE
    job_id = 9;

執行上面查詢語句,得到以下結果:

+----------+
| COUNT(*) |
+----------+
|        5 |
+----------+
1 row in set

2.2. SQL COUNT與GROUP BY子句示例

要查找每個部門的員工數,請使用COUNT和GROUP BY子句,如下所示:

SQL Count()函數

要在結果集中獲取部門名稱,需要將employees表與departments表內連接,如下所示:

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;

執行上面查詢語句,得到以下結果:
SQL Count()函數

2.3. SQL COUNT(*)帶有ORDER BY子句的示例

可以在COUNT(*)函數使用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;

執行上面查詢語句,得到以下結果:

SQL Count()函數

2.4. SQL COUNT帶有HAVING子句的示例
要按COUNT(*)函數的結果過濾分組,需要在COUNT(*)函數使用HAVING子句。

例如,以下語句獲取部門及其員工數量。 此外,它僅選擇員工人數大於5的部門。

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;

執行上面查詢語句,得到以下結果:

SQL Count()函數

2.5. SQL COUNT(DISTINCT表達式)示例
要獲取employees表中的工作崗位數,請將COUNT函數應用於job_id列,如下所示:

SELECT 
    COUNT(job_id)
FROM
    employees;

執行上面示例代碼,得到以下結果:

+---------------+
| COUNT(job_id) |
+---------------+
|            40 |
+---------------+
1 row in set

上面查詢中返回結果爲:40,其中包含重複的工作崗位ID。 我們希望找出工作崗位數量,則要刪除重複項,那麼要將DISTINCT關鍵字添加到COUNT函數,如下所示:

SELECT 
    COUNT(DISTINCT job_id)
FROM
    employees;
+------------------------+
| COUNT(DISTINCT job_id) |
+------------------------+
|                     19 |
+------------------------+
1 row in set

可以使用COUNT DISTINCT獲取經理數量,如下查詢:

SELECT 
    COUNT(DISTINCT manager_id)
FROM
    employees;
+----------------------------+
| COUNT(DISTINCT manager_id) |
+----------------------------+
|                         10 |
+----------------------------+
1 row in set

注意: 主席沒有經理。

在本教程中,您學習了應用SQL COUNT函數以獲取組中行數的各種方法。