令我相當新的MySQL,並有一些困難,理解爲什麼下面的查詢工作,因爲它的作用:協助查詢的邏輯和操作
select user, COUNT(*) c FROM user_rows GROUP BY user HAVING c > 1 ORDER BY c;
現在,輸出是正確的:它列出一個用戶以及他們在user_rows表中有多少行。
我的問題是爲什麼不COUNT(*)只返回user_rows表中的行數?它是一個操作順序嗎?只是試圖爲未來的參考獲得更多的清晰度。
令我相當新的MySQL,並有一些困難,理解爲什麼下面的查詢工作,因爲它的作用:協助查詢的邏輯和操作
select user, COUNT(*) c FROM user_rows GROUP BY user HAVING c > 1 ORDER BY c;
現在,輸出是正確的:它列出一個用戶以及他們在user_rows表中有多少行。
我的問題是爲什麼不COUNT(*)只返回user_rows表中的行數?它是一個操作順序嗎?只是試圖爲未來的參考獲得更多的清晰度。
因爲如果您有group by
子句,則所有聚合函數(如count
或sum
)均應用於每個組,而不是表中的完整數據。
由於您按user
分組,因此計算每位用戶的計數。
它不計算表中的所有行的原因是因爲你被用戶分組的
你GROUP BY子句影響COUNT語句的行爲,因爲你已經注意到。 GROUP BY直接影響通過使每行成爲與group by子句匹配的所有行的聚合返回的結果。這就是爲什麼COUNT(以及SUM,如果您使用它)將特定於每個由GROUP分組的值。
感謝您提供清晰,簡潔的答案。 – user3299633 2014-12-07 17:26:42