SQL 中 COUNT 的用法示例详解

 更新时间:2024年12月13日 09:44:32   作者:qq_62851576  
本文给大家介绍了SQL中的COUNT函数及其各种用法,包括统计总行数、特定列的非NULL值数量、不重复值数量,以及如何与GROUPBY、HAVING和JOIN结合使用,感兴趣的朋友一起看看吧

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用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • sqlserver中获取date类的年月日语句

    sqlserver中获取date类的年月日语句

    这篇文章主要介绍了sqlserver中通过date类获取年月日的语句,需要的朋友可以参考下
    2013-06-06
  • SQL Server中数据类型转换的原理、使用方法、常见场景示例讲解

    SQL Server中数据类型转换的原理、使用方法、常见场景示例讲解

    在SQLServer中,数据类型转换包含隐式转换和显式转换两种方式,隐式转换由系统自动完成,而显式转换需要使用CAST或CONVERT函数,本文详细讲解了数据类型转换的原理、使用方法和常见场景,并提供了具体示例,同时,介绍了错误处理函数TRY_CAST和TRY_CONVERT
    2024-09-09
  • SQL的SUBSTR()函数使用介绍

    SQL的SUBSTR()函数使用介绍

    SUBSTR函数是用来截取数据库某一列字段中的一部分,在各个数据库的函数名称不一样,下面为大家介绍其具体的使用
    2013-11-11
  • SQL子查询的具体使用

    SQL子查询的具体使用

    SQL子查询是嵌套在其他SQL查询中的查询,本文主要介绍了SQL子查询的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-05-05
  • SQL Server 2005 数据库转 SQL Server 2000的方法小结

    SQL Server 2005 数据库转 SQL Server 2000的方法小结

    这篇文章主要介绍了SQL Server 2005 数据库转 SQL Server 2000的方法,需要的朋友可以参考下
    2014-04-04
  • SQL Server数据库备份和恢复数据库的全过程

    SQL Server数据库备份和恢复数据库的全过程

    最近在功能调试前需要先将测试数据库备份,然后功能调试之后再将测试数据库还原,这样就可以重复的进行功能调试,这篇文章主要给大家介绍了关于SQL Server数据库备份和恢复数据库的相关资料,需要的朋友可以参考下
    2022-06-06
  • 关于SQL 存储过程入门基础(基础知识)

    关于SQL 存储过程入门基础(基础知识)

    本篇文章,小编将为大家介绍关于SQL 存储过程入门基础(基础知识),有需要的朋友可以参考一下
    2013-04-04
  • SQL Server数据库基本概念、组成、常用对象与约束

    SQL Server数据库基本概念、组成、常用对象与约束

    这篇文章介绍了SQL Server数据库的基本概念、组成、常用对象与约束,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-03-03
  • SQL语句中JOIN的用法场景分析

    SQL语句中JOIN的用法场景分析

    本文带领大家探讨下sql语句中join的用法,本文通过场景分析给大家介绍的很详细,感兴趣的朋友跟随小编一起看看吧
    2021-07-07
  • 一步步教你建立SQL数据库的表分区

    一步步教你建立SQL数据库的表分区

    分区存储提高了数据库的性能,被分区存储的数据物理上是多个文件,但逻辑上任然是一个表,对表的任何操作都跟没分区之前一样。插入、删除、查询、更新等操作的时候,数据库会自动为你找到对应的分区,然后执行操作。
    2015-09-09

最新评论