ToB企服应用市场:ToB评测及商务社交产业平台
标题:
SQL 中 COUNT 的用法详解
[打印本页]
作者:
乌市泽哥
时间:
2024-11-15 04:36
标题:
SQL 中 COUNT 的用法详解
1. COUNT(*):统计总行数
COUNT(*) 是 SQL 中最常用的统计方式之一。它会统计查询结果集中全部行的数量(包罗 NULL 值)。
语法:
SELECT COUNT(*) FROM 表名;
复制代码
示例:
假设我们有一个 employees 表,包罗以下数据:
idnameagedepartment1John Doe3
0Sales2
Jane SmithNULLHR3
Alice Brown2
5NULL
执行以下查询:
SELECT COUNT(*) FROM employees;
复制代码
结果:
3
复制代码
解释:
COUNT(*) 会统计全部行,不会忽略 NULL 值,即使某些列有 NULL,它也管帐算每一行。因此,结果为 3
,表现表中共有 3
行数据。
2
. COUNT(1):统计总行数
COUNT(1) 的作用与 COUNT(*) 类似,也会统计表中全部的行。它是 SQL 优化中的一个小本领,某些数据库体系(如 MySQL)会对其进行优化处置惩罚。
语法:
SELECT COUNT(1) FROM 表名;
复制代码
解释:
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;
复制代码
结果
2
复制代码
4. COUNT(DISTINCT 列名):统计某列中不重复的非 NULL 值的数量
有时,我们不仅需要统计某列中的非 NULL 值,还需要统计不重复的值。在这种情况下,可以使用 COUNT(DISTINCT 列名) 来完成这个使命。
语法:
SELECT COUNT(DISTINCT 列名) FROM 表名;
复制代码
示例:
假设我们有以下表数据:
iddepartment1Sales2
HR3
Sales4IT 查询:
SELECT COUNT(DISTINCT department) FROM employees;
复制代码
结果:
3
复制代码
解释:
表中有三个不重复的 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企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4