mysql - SQL COUNT() 在哪个列上运行有什么区别?

标签 mysql sql

首先,这不是在询问 In SQL, what's the difference between count(column) and count(*)? .

假设我有一个 users 表,其中有一个主键 user_id 和另一个字段 logged_in ,它描述了用户现在是否登录。

运行有区别吗

SELECT COUNT(user_id) FROM users WHERE logged_in=1

SELECT COUNT(logged_in) FROM 用户 WHERE logged_in=1

查看有多少用户被标记为已登录?也许与索引不同?

如果有特定于数据库的细微差别,我正在运行 MySQL。

最佳答案

在 MySQL 中,count 函数不会对 null 表达式进行计数,因此您的两次查询的结果可能不同。正如评论和 Remus 的回答中提到的,这是 SQL 的一般规则,也是 spec 的一部分。 .

例如,考虑以下数据:

user_id   logged_in
1         1
null      1
此表上的

SELECT COUNT(user_id) 将返回 1,但 SELECT COUNT(logged_in) 将返回 2。

作为一个实际问题,问题中示例的结果应该始终相同,只要表构造正确,但使用的索引和查询计划可能不同,即使结果相同.此外,如果这是一个简化的示例,则对不同列的计数也可能会改变结果。

另见这个问题:MySQL COUNT() and nulls

关于mysql - SQL COUNT() 在哪个列上运行有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14388189/

相关文章:

c# - C# 中的 SQL 命令不起作用

php - Eloquent - 在列中搜索 ID,例如 ['4' ,'6' ,'8' ] (PHP Laravel)

mysql - Openshift 数据库连接问题

c# - 从 C# 到 MySQL 实例的 SSH 和 sudo 连接

mysql - 使用 sum、where 条件和 group by 进行查询

MySQL 查询 : Getting the most recent forum post

sql - 更好地执行 SQL 代码以将数据提取到文件?

mysql - 具有公开 SQL 的 SaaS

php - 检查返回数组中是否有更多引用递归的 MYSQL 查询是什么?

c# - 不存在从 ObjectParameter 到已知托管提供程序 native 类型的映射