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子句範例

要查詢每個部門的員工數,請使用COUNTGROUP BY子句,如下所示:

要在結果集中獲取部門名稱,需要將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;

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

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;

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

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;

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

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函式以獲取組中行數的各種方法。