我对MySQL很新,并且很难理解为什么以下查询正常工作:
select user, COUNT(*) c FROM user_rows GROUP BY user HAVING c > 1 ORDER BY c;
现在,输出是正确的:它列出了一个用户以及他们在user_rows表中有多少行。
我的问题是为什么COUNT(*)只返回user_rows表中的行数?这是一个操作顺序吗?只是试图为将来的参考增加清晰度。
答案 0 :(得分:1)
因为如果您有一个group by
子句,那么所有聚合函数(如count
或sum
)都将应用于每个组,而不是表中的完整数据。
由于您按user
分组,因此会计算每个用户的计数。
答案 1 :(得分:1)
它不计算表中所有行的原因是因为您按用户分组
答案 2 :(得分:1)
正如您所注意到的,您的GROUP BY子句正在影响COUNT语句的行为。 GROUP BY直接影响返回的结果,方法是使每一行成为与group by子句匹配的所有行的聚合。这就是为什么COUNT(和SUM,如果你使用它)将特定于GROUPING的每个值。