帮助查询逻辑和操作顺序



>我对MySQL相当陌生,很难理解为什么以下查询可以正常工作:

select user, COUNT(*) c FROM user_rows GROUP BY user HAVING c > 1 ORDER BY c;

现在,输出是正确的:它列出了用户以及他们在user_rows表中有多少行。

我的问题是为什么 COUNT(*) 不只返回user_rows表中的行数?是操作顺序的事情吗?只是试图增加清晰度以供将来参考。

因为如果您有group by子句,则所有聚合函数(如countsum)都将应用于每个组,而不是表中的完整数据。

由于您按 user 进行分组,因此将为每个用户计算计数。

它不计算表中的所有行的原因是因为您按用户分组

正如您所指出的,您的 GROUP BY 子句正在影响 COUNT 语句的行为。GROUP BY 通过使每一行成为与 group by 子句匹配的所有行的聚合来直接影响返回的结果。这就是为什么 COUNT(和 SUM,如果你使用它)将特定于每个值 GROUPed 依据。

最新更新