当前位置: 代码网 > it编程>数据库>MsSqlserver > SQL 中 COUNT 的用法示例详解

SQL 中 COUNT 的用法示例详解

2024年12月14日 MsSqlserver 我要评论
1. count(*):统计总行数count(*) 是 sql 中最常用的统计方式之一。它会统计查询结果集中所有行的数量(包括 null 值)。语法:select count(*) from 表名;示

1. count(*):统计总行数

count(*) 是 sql 中最常用的统计方式之一。它会统计查询结果集中所有行的数量(包括 null 值)。

语法:

select count(*) from 表名;

示例: 假设我们有一个 employees 表,包含以下数据:

idnameagedepartment
1john doe30sales
2jane smithnullhr
3alice brown25null

执行以下查询:

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 表名;

示例: 假设我们有以下表数据:

iddepartment
1sales
2hr
3sales
4it

查询:

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. counthaving 的结合

having 子句通常与 group by 一起使用,用来过滤聚合结果。它可以用来限制返回的分组数量,条件可以基于 count() 等聚合函数的结果。

7. countjoin 的结合

在复杂的查询中,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 byhaving 等子句结合,进行复杂的分组统计和条件过滤。
  • count(*)count(1) 在大多数数据库中性能相同,可以按习惯使用。

到此这篇关于sql 中 count 的用法示例详解的文章就介绍到这了,更多相关sql count用法内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com