摘要:在本教程中,您将学习如何使用 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
-------
40以下示例使用 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)输出
count
-------
5它的工作原理如下:
- 首先,
WHERE子句包含employees表中职位 ID 为 9 的行。 - 其次,
COUNT(*)返回employees表中职位 ID 为 9 的行数
以下示例使用 AS 关键字为 COUNT(*) 指定一个列别名
SELECT
COUNT(*) AS employee_count
FROM
employees
WHERE
job_id = 9;Code language: PHP (php)输出
employee_count
----------------
5SQL COUNT 与 GROUP BY 子句示例 #
以下示例使用 COUNT 函数和 GROUP BY 子句来查找每个部门的员工人数
SELECT
department_id,
COUNT(*) employee_count
FROM
employees
GROUP BY
department_id
ORDER BY
employee_count;Code language: SQL (Structured Query Language) (sql)输出
department_id | employee_count
---------------+----------------
7 | 1
4 | 1
1 | 1
11 | 2
2 | 2
9 | 3
6 | 5
8 | 6
3 | 6
10 | 6
5 | 7工作原理
- 首先,
GROUP BY子句按部门 ID 对employees表中的行进行分组。 - 其次,
COUNT(*)函数返回每个分组的行数
以下示例使用 COUNT(*) 函数按部门获取员工人数。此外,它还使用 INNER JOIN 子句将部门名称包含在结果集中
SELECT
department_name,
COUNT(*) employee_count
FROM
employees e
INNER JOIN departments d ON d.department_id = e.department_id
GROUP BY
department_name
ORDER BY
employee_count;Code language: SQL (Structured Query Language) (sql)输出
department_name | employee_count
------------------+----------------
Administration | 1
Human Resources | 1
Public Relations | 1
Accounting | 2
Marketing | 2
Executive | 3
IT | 5
Finance | 6
Purchasing | 6
Sales | 6
Shipping | 7Code language: PHP (php)SQL COUNT 与 HAVING 子句示例 #
以下示例按部门返回员工人数。此外,它还使用 HAVING 子句来仅选择员工超过五人的部门
SELECT
department_name,
COUNT(*) employee_count
FROM
employees e
INNER JOIN departments d ON d.department_id = e.department_id
GROUP BY
department_name
HAVING
COUNT(*) > 5
ORDER BY
employee_count DESC;Code language: SQL (Structured Query Language) (sql) department_name | employee_count
-----------------+----------------
Shipping | 7
Purchasing | 6
Finance | 6
Sales | 6SQL COUNT(DISTINCT 表达式) 示例 #
以下示例使用 COUNT 来获取 employees 表中 job_id 列的值的数量
SELECT
COUNT(job_id)
FROM
employees;Code language: SQL (Structured Query Language) (sql) count
-------
40查询返回 40,其中包括重复值。要删除重复项,您可以在 COUNT 函数中使用 DISTINCT 关键字,如下所示
SELECT
COUNT(DISTINCT job_id)
FROM
employees; count
-------
19以下示例使用带 DISTINCT 关键字的 COUNT 函数来获取经理的人数
SELECT
COUNT(DISTINCT manager_id)
FROM
employees;Code language: SQL (Structured Query Language) (sql)输出
count
-------
10摘要 #
COUNT函数返回一个组中的行数。ALL关键字包含重复值,而DISTINCT关键字则在结果中移除重复值。COUNT(*)返回查询中的行数,包括重复行和包含 null 值的行。
数据库 #
- PostgreSQL COUNT 函数
- Oracle COUNT 函数
- SQL Server COUNT 函数
- MySQL COUNT 函数
- SQLite COUNT 函数
- Db2 COUNT 函数
- MariaDB COUNT 函数