协助查询逻辑和操作顺序

时间:2014-12-07 17:23:59

标签: mysql sql

我对MySQL很新,并且很难理解为什么以下查询正常工作:

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

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

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

3 个答案:

答案 0 :(得分:1)

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

由于您按user分组,因此会计算每个用户的计数。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

正如您所注意到的,您的GROUP BY子句正在影响COUNT语句的行为。 GROUP BY直接影响返回的结果,方法是使每一行成为与group by子句匹配的所有行的聚合。这就是为什么COUNT(和SUM,如果你使用它)将特定于GROUPING的每个值。