Mysql 返回sql查询中的前3个计数值
我已根据列字段对表进行了分组,并同时显示了每组的计数值。 比如说Mysql 返回sql查询中的前3个计数值,mysql,sqlite,Mysql,Sqlite,我已根据列字段对表进行了分组,并同时显示了每组的计数值。 比如说 user | count(user) user 1 | 4 user 2 | 3 user 3 | 3 user 4 | 3 user 5 | 2 现在我只需要显示前3位的用户数,在这个例子中是用户1,用户2,用户3,用户4 我已经编写了分组逻辑,但是当我尝试按desc对count的值排序,然后将结果限制为3Limit 3时,我只得到用户1、2和3。这是不正确的,因为用户4也排在
user | count(user)
user 1 | 4
user 2 | 3
user 3 | 3
user 4 | 3
user 5 | 2
现在我只需要显示前3位的用户数,在这个例子中是用户1,用户2,用户3,用户4
我已经编写了分组逻辑,但是当我尝试按desc对count的值排序,然后将结果限制为3Limit 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;
另请参见以下内容:
按用户组按用户选择用户,count1具有countuser>=按用户顺序按countuser描述限制2,1按countuser顺序从用户组中选择count1
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)
所以诀窍是找出第三高的计数值是什么。然后让所有计数>=为该值的用户,这样它就包括排名第三的用户
限制为2,1的子查询用于获取第三高的计数值。因此,如果您想要最高的5而不是3,您可以使用限制4,1。请测试它:选择用户,COUNTuser FROMtable GROUP BY user have MAX countusers这是还是?