1. COUNT(*):统计总行数
COUNT(*) 是 SQL 中最常用的统计方式之一。它会统计查询结果集中全部行的数量(包罗 NULL 值)。
语法:
示例: 假设我们有一个 employees 表,包罗以下数据:
idnameagedepartment1John Doe3
0Sales2
Jane SmithNULLHR3
Alice Brown2
5NULL
执行以下查询:
- SELECT COUNT(*) FROM employees;
复制代码 结果:
解释: COUNT(*) 会统计全部行,不会忽略 NULL 值,即使某些列有 NULL,它也管帐算每一行。因此,结果为 3
,表现表中共有 3
行数据。
2
. COUNT(1):统计总行数
COUNT(1) 的作用与 COUNT(*) 类似,也会统计表中全部的行。它是 SQL 优化中的一个小本领,某些数据库体系(如 MySQL)会对其进行优化处置惩罚。
语法:
解释: COUNT(1) 和 COUNT(*) 的结果是相同的,都会返回表中全部行的数量。数据库会将 1 替代成一个常量来到场计算,并且不会关心每一列的详细值。
优化区别: 在某些数据库体系(如 MySQL)中,COUNT(1) 和 COUNT(*) 在执行计划中的表现可能相同,查询效率根本没有区别。然而,某些旧版的数据库体系在处置惩罚 COUNT(*) 时,会去解析整行数据,而 COUNT(1) 可以直接统计行数,因此会有一些微小的性能差异。
3
. COUNT(列名):统计特定列中非 NULL 值的数量
与 COUNT(*) 不同,COUNT(列名) 只会统计指定列中非 NULL 值的数量。如果某列中有 NULL 值,COUNT(列名) 会自动跳过它们。
语法:
- SELECT COUNT(列名) FROM 表名;
复制代码 示例:
- SELECT COUNT(age) FROM employees;
复制代码 结果
4. COUNT(DISTINCT 列名):统计某列中不重复的非 NULL 值的数量
有时,我们不仅需要统计某列中的非 NULL 值,还需要统计不重复的值。在这种情况下,可以使用 COUNT(DISTINCT 列名) 来完成这个使命。
语法:
- SELECT COUNT(DISTINCT 列名) FROM 表名;
复制代码 示例: 假设我们有以下表数据:
iddepartment1Sales2
HR3
Sales4IT 查询:
- SELECT COUNT(DISTINCT department) FROM employees;
复制代码 结果:
解释: 表中有三个不重复的 department 值:Sales, HR, IT。因此,COUNT(DISTINCT department) 返回 3
,表现有 3
个不同的部门。
5. COUNT() 与 GROUP BY 的联合
COUNT() 函数经常和 GROUP BY 子句联合使用,用于统计每个分组的数量。GROUP BY 按照某列对数据进行分组,COUNT() 则对每个分组内的行数进行统计。
6. COUNT 与 HAVING 的联合
HAVING 子句通常与 GROUP BY 一起使用,用来过滤聚合结果。它可以用来限制返回的分组数量,条件可以基于 COUNT() 等聚合函数的结果。
7. COUNT 与 JOIN 的联合
在复杂的查询中,COUNT() 函数可以与 JOIN 子句一起使用,统计与另一个表匹配的纪录数量。
示例:
- SELECT d.department, COUNT(e.id)
- FROM departments d
- LEFT JOIN employees e ON d.id = e.department_id
- GROUP BY d.department;
复制代码 解释: 此查询会返回每个部门中员工的数量,即使某些部门没有员工,也会返回该部门的纪录(由于使用了 LEFT JOIN)。使用 COUNT(e.id) 统计每个部门中关联的员工数量。
COUNT(*) 和 COUNT(1) 的区别
区别:
- 在大多数数据库体系中,COUNT(*) 和 COUNT(1) 的性能险些相同。COUNT(*) 会统计表中全部行,而不关心列内容,而 COUNT(1) 则是将 1 作为一个固定值用于统计。
- 在某些数据库体系中,COUNT(1) 被以为轻微高效一点,由于它不需要解析全部列,只是使用常量 1 来计数。
结论: 现代数据库(如 MySQL)会对 COUNT(*) 和 COUNT(1) 做优化处置惩罚,因此二者的性能差异险些可以忽略。选择哪种方式可以根据个人风俗或项目规范。
总结
- COUNT(*):统计表中全部行,包罗 NULL 值。
- COUNT(1):与 COUNT(*) 类似,统计全部行。
- COUNT(列名):统计某列中非 NULL 值的数量。
- COUNT(DISTINCT 列名):统计某列中不重复的非 NULL 值。
- COUNT 可与 GROUP BY 和 HAVING 等子句联合,进行复杂的分组统计和条件过滤。
- COUNT(*) 和 COUNT(1) 在大多数数据库中性能相同,可以按风俗使用。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao12
3
.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |