摘要:本教程将介绍如何使用 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(*)
函数返回查询中表中的行数。它统计重复行和包含空值的行。
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(*)
函数返回部门 id 为 6 的employees
表中的行数。
以下示例使用 COUNT(*)
函数获取 job id 为 9 的员工数
SELECT
COUNT(*)
FROM
employees
WHERE
job_id = 9;
Code language: SQL (Structured Query Language) (sql)
它是这么工作的。
- 第一,
WHERE
子句包括了 job id 为 9 的employees
表中的行。 - 其次,
COUNT(*)
返回 job id 为 9 的employees
表中的行数。
以下示例使用 AS 关键字为 COUNT(*)
分配一个列别名
SELECT
COUNT(*) as employee_count
FROM
employees
WHERE
job_id = 9;
Code language: JavaScript (javascript)
带有 GROUP BY 子句的 SQL COUNT 示例
以下示例将 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)

包含 ORDER BY 子句的 SQL 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;
Code language: SQL (Structured Query Language) (sql)

包含 HAVING 子句的 SQL COUNT 示例
以下示例返回按部门划分的员工数。此外,它使用一个 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 expression) 示例
以下示例使用 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;

以下示例使用包含 DISTINCT
关键字的 COUNT
函数来获取经理数目
SELECT
COUNT(DISTINCT manager_id)
FROM
employees;
Code language: SQL (Structured Query Language) (sql)

总结
COUNT
函数返回组中的行数。ALL
关键字包括重复值,而DISTINCT
关键字移除结果中的重复值。COUNT(*)
返回查询中的行数,包括重复行和包含空值的行。