2014-12-07 101 views
0

令我相當新的MySQL,並有一些困難,理解爲什麼下面的查詢工作,因爲它的作用:協助查詢的邏輯和操作

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

現在,輸出是正確的:它列出一個用戶以及他們在user_rows表中有多少行。

我的問題是爲什麼不COUNT(*)只返回user_rows表中的行數?它是一個操作順序嗎?只是試圖爲未來的參考獲得更多的清晰度。

回答

1

因爲如果您有group by子句,則所有聚合函數(如countsum)均應用於每個組,而不是表中的完整數據。

由於您按user分組,因此計算每位用戶的計數。

+0

感謝您提供清晰,簡潔的答案。 – user3299633 2014-12-07 17:26:42

1

它不計算表中的所有行的原因是因爲你被用戶分組的

1

你GROUP BY子句影響COUNT語句的行爲,因爲你已經注意到。 GROUP BY直接影響通過使每行成爲與group by子句匹配的所有行的聚合返回的結果。這就是爲什麼COUNT(以及SUM,如果您使用它)將特定於每個由GROUP分組的值。