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(*) 函数返回查询中表中的行数。它统计重复行和包含空值的行。

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(*) 函数返回部门 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)

试一试

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

包含 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)

试一试

SQL COUNT with ORDER BY example

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

SQL COUNT(DISTINCT expression) 示例

以下示例使用 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

以下示例使用包含 DISTINCT 关键字的 COUNT 函数来获取经理数目

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

试一试

SQL COUNT DISTINCT manager example

总结

  • COUNT 函数返回组中的行数。
  • ALL 关键字包括重复值,而 DISTINCT 关键字移除结果中的重复值。
  • COUNT(*) 返回查询中的行数,包括重复行和包含空值的行。
本教程是否有用?