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

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

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

还没有评论