2012-07-20 67 views
3

我需要的SQL查询为MySQL选择前10名的人大多数追随者需要选择顶层10人SQL

我的表

 
id | user_id | follow_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,所以TOP 10将是

ID为6,7,3 ...用户

回答

1

你想使用MySQL GROUP BY聚集功能可按

SELECT user_id, COUNT(follow_id) AS total_followers 
FROM users 
GROUP BY follow_id 
ORDER BY total_followers LIMIT 10; 
+0

注意使用'count'这样的工作,因为它可能是[MySQL保留字](http://stackoverflow.com/a/11578960/292015)的一部分。 'COUNT'不是,我知道,但是你面对一个初学者:)在列表中,用''''封装'count'。 – 2012-07-20 12:18:25

+1

你为什么使用'SELECT *'? 'id'和'user_id'列会显示什么?哪一个追随者? – 2012-07-20 12:22:22

+0

我做了更改 – 2012-07-20 12:27:01

0
SELECT follow_id, 
      COUNT(user_id) AS number_of_followers 
    FROM table 
    GROUP BY follow_id 
    ORDER BY number_of_followers DESC 
    LIMIT 10; 
+2

都能跟得上您计算每个用户有多少人如下 - 而不是有多少是跟了上去。 – 2012-07-20 12:08:10

+1

这会计算跟随某人的人数 – 2012-07-20 12:25:47

+1

您是对的,误读了要求。现在已经被颠倒过来了。 – 2012-07-20 12:35:57

8
SELECT `follow_id`, COUNT(1) AS `followers` 
FROM `tbl` 
GROUP BY `follow_id` 
ORDER BY COUNT(1) DESC 
LIMIT 10; 
+1

-1结果集的第一列是“one-of”的计数值,它没有任何意义,对于group by也是如此。您可能想使用'user_id'来代替。 – 2012-07-20 12:05:26

+0

对'*'进行计数是不好的做法。喜欢[Kasia Gogolek提案](http://stackoverflow.com/a/11578960/292015)。 – 2012-07-20 12:15:20

+0

@MihaiStancu不,该组需要'follow_id'而不是'user_id'。而且,OP想要一个关注用户的列表。 – hjpotter92 2012-07-20 12:15:55

2
SELECT follow_id,count(id) AS cnt FROM table 
GROUP BY follow_id ORDER BY cnt DESC LIMIT 10 
+1

-1 MySQL不支持MSSQL语法。 – 2012-07-20 12:04:16

+0

我已纠正它。 – cppcoder 2012-07-20 12:06:08

+0

+1进行更正。 – 2012-07-20 12:06:41

1

尝试一些事情是这样的:

select follow_id 
from myTable 
group by follow_id 
order by count(user_id) 
Limit 10 
2

您可以使用

SELECT user_id , COUNT(id) AS count FROM tbl GROUP BY follow_id ORDER BY count DESC LIMIT 10; 
+0

-1 MySQL不支持MSSQL语法。 – 2012-07-20 12:07:36

+0

@MihaiStancu:我已纠正它 – Suleman 2012-07-20 12:10:07

1

您需要组结果如下_id,然后计算该组中的结果数量,然后按降序对每个组的结果数量进行排序,然后定义您希望将其限制为只能使用LIMIT可以完成的10个结果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