为特定的人找到最受欢迎的追随者。一个人的追随者越多
他们很受欢迎。
我需要SQL查询来选择特定人群中最受欢迎的追随者。
我的桌子-(追随者)
id | person_id | follower_person_id
1 1 2
2 1 3
3 2 1
4 2 4
5 3 1
6 3 2
7 3 4
8 4 3
例如,person_id 1共有2个跟随者,person_id 2共有2个跟随者
关注者,个人id 3共有3个关注者,个人id 4共有
2个追随者。
因此,person_id 3是person_id 1最受欢迎的追随者,
person_id 1是person_id 2最受欢迎的追随者,依此类推。。。
这是我的问题,但它不起作用。。。
SELECT follower_person_id FROM followers f where f.person_id = 1 group by f.follower_person_id having max(select count(*) from followers where person_id = f.follower_person_id)
最佳答案
您可以使用以下查询获取每个人的关注人数:
SELECT person_id, COUNT(*) AS cnt
FROM followers
GROUP BY person_id
输出:
person_id cnt
-------------
1 2
2 2
3 3
4 1
使用上面的查询作为派生表,您可以得到每个人的关注者数量(听起来有点复杂!):
SELECT t1.person_id, t1.follower_person_id, t2.cnt
FROM followers AS t1
JOIN (
SELECT person_id, COUNT(*) AS cnt
FROM followers
GROUP BY person_id
) AS t2 ON t1.follower_person_id = t2.person_id
输出:
person_id, follower_person_id, cnt
------------------------------------
1, 2, 2
1, 3, 3
2, 1, 2
2, 4, 1
3, 1, 2
3, 2, 2
3, 4, 1
4, 3, 3
由于您只寻找特定的人,因此可以在上面的查询中使用
WHERE
子句:SELECT t1.person_id, t1.follower_person_id, t2.cnt
FROM followers AS t1
JOIN (
SELECT person_id, COUNT(*) AS cnt
FROM followers
GROUP BY person_id
) AS t2 ON t1.follower_person_id = t2.person_id
WHERE t1.person_id = 1
ORDER BY t2.cnt DESC LIMIT 1
ORDER BY
使用LIMIT
将为您提供特定人员正在跟踪的最受欢迎的人。输出:
person_id, follower_person_id, cnt
-----------------------------------
1, 3, 3
注意:您可以使用变量对第二个查询的输出进行泛化,以获得每个人跟随的最受欢迎的人(这是每个组最大的问题)。
关于mysql - 为特定人员选择最“受欢迎”的关注者。某人的追随者越多,他们越“受欢迎”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43270286/