0


SQL 中 COUNT 的用法详解

1.

COUNT(*)

:统计总行数

COUNT(*)

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

NULL

值)。

语法:

SELECT COUNT(*) FROM 表名;

示例: 假设我们有一个

employees

表,包含以下数据:
idnameagedepartment1John Doe30Sales2Jane SmithNULLHR3Alice 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 表名;

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

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

本文转载自: https://blog.csdn.net/qq_62851576/article/details/142935524
版权归原作者 qq_62851576 所有, 如有侵权,请联系我们删除。

“SQL 中 COUNT 的用法详解”的评论:

还没有评论