SQL COUNT

摘要:在本教學中,您將學習如何使用 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 表格來進行示範

employees_table

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)

試試看

SQL COUNT with GROUP BY example

運作方式

  • 首先,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 with INNER JOIN example

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 with ORDER BY example

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 with HAVING clause example

SQL COUNT(DISTINCT 運算式) 範例

下列範例使用 COUNT 來取得 employees 表格中 job_id 欄位的值的數量

SELECT 
    COUNT(job_id)
FROM
    employees;Code language: SQL (Structured Query Language) (sql)

試試看

SQL COUNT expression example

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

SELECT 
    COUNT(DISTINCT job_id)
FROM
    employees;
SQL COUNT DISTINCT example

下列範例將 COUNT 函數與 DISTINCT 關鍵字搭配使用,以取得經理人數

SELECT 
    COUNT(DISTINCT manager_id)
FROM
    employees;Code language: SQL (Structured Query Language) (sql)

試試看

SQL COUNT DISTINCT manager example

摘要

  • COUNT 函數會傳回群組中的列數。
  • ALL 關鍵字會包含重複的值,而 DISTINCT 關鍵字會移除結果中的重複值。
  • COUNT(*) 會傳回查詢中的列數,包括重複的列和包含 null 值的列。
這個教學對您有幫助嗎?