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这是还是?