我已經根據列字段爲我的表分組,並同時顯示每個組的計數值。 例如在sql查詢中返回前3個計數值
user | count(user)
user 1 | 4
user 2 | 3
user 3 | 3
user 4 | 3
user 5 | 2
現在我需要只顯示前3用戶計數4.
我已經寫分組邏輯這種情況下用戶1,用戶2,用戶3,用戶但當我嘗試訂購然後將結果限制爲3(限制3),我只得到用戶1,2和3.這是不正確的,因爲用戶4也進入前3計數。
我已經根據列字段爲我的表分組,並同時顯示每個組的計數值。 例如在sql查詢中返回前3個計數值
user | count(user)
user 1 | 4
user 2 | 3
user 3 | 3
user 4 | 3
user 5 | 2
現在我需要只顯示前3用戶計數4.
我已經寫分組邏輯這種情況下用戶1,用戶2,用戶3,用戶但當我嘗試訂購然後將結果限制爲3(限制3),我只得到用戶1,2和3.這是不正確的,因爲用戶4也進入前3計數。
首先用獨立確定臨界值選擇這將是(用於MySQL的)更容易:
SELECT MIN(cnt)
INTO @min
FROM (
SELECT COUNT(*) cnt
FROM Table
GROUP BY user
ORDER BY cnt DESC
LIMIT 3
) t;
SELECT user, COUNT(*) usercount
FROM Table
GROUP BY user
HAVING usercount>= @min
ORDER BY usercount DESC;
這應做到:
選擇用戶,計數(1)來自用戶組,具有計數(用戶)> =(從用戶組中選擇計數(1)按用戶順序計數(用戶)限制2,1 )按次數(用戶)
Example table:
mysql> select * from users;
+----+-------+
| id | user |
+----+-------+
| 1 | user1 |
| 3 | user3 |
| 4 | user4 |
| 5 | user5 |
| 6 | user1 |
| 7 | user2 |
| 8 | user2 |
| 9 | user2 |
| 10 | user2 |
| 11 | user1 |
| 12 | user5 |
| 13 | user5 |
| 14 | user6 |
| 15 | user6 |
| 16 | user6 |
+----+-------+
15 rows in set (0.00 sec)
mysql> select user, count(1) from users group by user having count(user) >= (select count(1) from users group by user order by count(user) desc limit 2, 1) order by count(user) desc;
+-------+----------+
| user | count(1) |
+-------+----------+
| user2 | 4 |
| user1 | 3 |
| user5 | 3 |
| user6 | 3 |
+-------+----------+
4 rows in set (0.00 sec)
所以訣竅是弄清楚第三最高計數值是什麼。然後獲得所有具有> =的計數的用戶(因此它包括並列第三名的用戶)。
帶有LIMIT 2,1的子查詢用於獲取第三高的計數值。所以你可以使用限制4,1如果你想要5而不是3。
請測試它:SELECT'user',COUNT('user')FROM'table' GROUP BY'user' HAVING MAX COUNT('用戶') –
這是[標籤:mysql]還是[標籤:sqlite]? – Mureinik