Mysql 需要选择前10名人员
我需要SQL查询MySQL来选择拥有最多追随者的前十名 我的桌子 id | user_id | follow_id 1 3 6 2 3 7 3 4 6 4 5 6 5 7 3 6 9 7 id |用户id |跟随id 1 3 6 2 3 7 3 4 6 4 5 6 5 7 3 6 9 7 从示例中,id为6的用户有3次跟踪,7->2和3->1,所以前10名将是 id为6,7,3…的用户是否要使用MySQL聚合功能Mysql 需要选择前10名人员,mysql,sql,Mysql,Sql,我需要SQL查询MySQL来选择拥有最多追随者的前十名 我的桌子 id | user_id | follow_id 1 3 6 2 3 7 3 4 6 4 5 6 5 7 3 6 9 7 id |用户id |跟随id 1 3 6 2 3 7 3 4 6 4
SELECT follow_id,
COUNT(user_id) AS number_of_followers
FROM table
GROUP BY follow_id
ORDER BY number_of_followers DESC
LIMIT 10;
SELECT user_id, COUNT(follow_id) AS total_followers
FROM users
GROUP BY follow_id
ORDER BY total_followers LIMIT 10;
试试这样的东西:
select follow_id
from myTable
group by follow_id
order by count(user_id)
Limit 10
你可以用
SELECT user_id , COUNT(id) AS count FROM tbl GROUP BY follow_id ORDER BY count DESC LIMIT 10;
您需要按follow_id对结果进行分组,然后计算此组中的结果数,并按每组结果数降序对其进行排序,然后定义您希望将其限制为仅10个结果,这可以通过使用limit 0,10来完成 下面的查询在MySQL 5中工作得非常好
SELECT follow_id, COUNT(follow_id) AS nr
FROM test.testtable
GROUP BY follow_id
ORDER BY nr DESC
LIMIT 0,10
-1结果集的第一列是它没有意义的计数值之一,与group by相同。您可能想使用
用户id
。指望*
是不好的做法。更喜欢@Adrien:在MySQL中使用COUNT(*)
并不是一个坏习惯。事实上,在许多版本中,它比COUNT(column)
更有效。区别在于:-COUNT(*)
将计算记录数COUNT(列名称)
将统计列名称不为空的记录数。如果您使用的是MyISAM,并且没有WHERE
子句,那么优化者甚至不必查看表,因为行数已经被缓存了。@Adrien:我知道区别。你的观点是什么?这不是一个MyISAM表(据我们所知),它有一个GROUP BY
,因此不适用,在这种情况下,计数(*)
和计数(跟随id)
在结果上是相等的,但有时在效率上是不一样的。不,你在计算每个用户跟随的人数,而不是跟随他们的人数。这将计算跟随某人的人数。你是对的,误解了要求。现在它被颠倒了。@MihaiStancu:我已经纠正了它,请小心使用count
之类的工作,因为它可能是一部分<我知道,code>COUNT不是,但您正面临一个初学者:)在列表中,用`
封装COUNT
。为什么要使用SELECT*
?您认为id
和user\u id
列将显示什么?哪一个关注者?这应该是选择关注id,
而不是选择用户id,
。这是一个以这种方式产生错误结果的查询,就像现在一样。
SELECT user_id , COUNT(id) AS count FROM tbl GROUP BY follow_id ORDER BY count DESC LIMIT 10;
SELECT follow_id, COUNT(follow_id) AS nr
FROM test.testtable
GROUP BY follow_id
ORDER BY nr DESC
LIMIT 0,10