大家好,我是锋哥。今天分享关于【count(1)、count(_)与count(列名)的区别?】面试题。希望对大家有帮助;

count(1)、count(_)与count(列名)的区别?
1000道 互联网大厂Java工程师 精选面试题-Java资源分享网
在 SQL 中,COUNT() 是一个用于统计行数的聚合函数。COUNT(1)、COUNT(*) 和 COUNT(列名) 是三种常见的用法,它们在不同情况下的表现有所不同。下面我会详细解释这三者的区别。
1. COUNT(1)
- 功能:统计查询结果中的行数。无论该行中任何列的值是否为
NULL,都会被计数。 - 如何工作:
COUNT(1)会将每一行都计数一次。这里的1表示对每一行都返回一个常量值1,因此不关心该行具体列的内容。它计数的是所有行的总数。 - 与其他形式的区别:
COUNT(1)和COUNT(*)结果通常是一样的,因为它们都统计了所有的行数。
示例:
SELECT COUNT(1) FROM employees;
这会返回 employees 表中所有行的数量。
2. COUNT(*)
- 功能:统计查询结果中的行数,不会忽略任何行,即使某些列的值为
NULL,也会被计数。 - 如何工作:
COUNT(*)计算的是表中行的总数,它不关心列的内容。即使某一列的值为NULL,该行也会被计数在内。 - 与其他形式的区别:
COUNT(*)是统计表中行数的标准方法,通常与COUNT(1)产生相同的结果。
示例:
SELECT COUNT(*) FROM employees;
这也会返回 employees 表中的所有行的数量。
3. COUNT(列名)
- 功能:统计某一列中非
NULL值的行数。COUNT(列名)只会对该列中不为NULL的行进行计数。 - 如何工作:
COUNT(列名)不会计数该列值为NULL的行。如果列中有NULL值,这些行会被排除在计数之外。
示例:
SELECT COUNT(salary) FROM employees;
这会返回 employees 表中 salary 列中非 NULL 值的数量。如果某些行的 salary 列值为 NULL,这些行不会被计数。
总结比较:
| 函数 | 计数的内容 | 忽略 NULL 值 | 注意事项 |
|---|---|---|---|
COUNT(*) | 统计所有行(不管列的值是否 NULL) | 否 | 适用于统计所有行数 |
COUNT(1) | 统计所有行(不管列的值是否 NULL) | 否 | 通常与 COUNT(*) 功能相同 |
COUNT(列名) | 统计该列非 NULL 值的行数 | 是 | 只计数该列中非 NULL 的行 |
常见误区:
COUNT(*)和COUNT(1)在大多数情况下是等效的。它们都统计了查询结果的行数。COUNT(列名)会忽略NULL值,如果列中有很多NULL,可能会返回较少的结果。
总的来说,选择哪种写法取决于你想要统计的内容:
- 如果你想要统计所有行数,包括所有的
NULL和非NULL列,使用COUNT(*)或COUNT(1)。 - 如果你只关心某列中非
NULL的行,使用COUNT(列名)。








![【山西长治】《长治市市直部门政务信息化建设项目预算编制规范和预算编制标准》(长财行[2022]25号)-省市费用标准解读系列32](https://i-blog.csdnimg.cn/img_convert/9aaec07eb124263f0638e951b006bca7.png)










