admin

为特定人选择最多的“热门”关注者。某人拥有的追随者越多,他们越“受欢迎”。

sql

查找特定人的大多数“热门”关注者。某人拥有的追随者越多,他们越“受欢迎”。

我需要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个关注者,person_id 3共有3个关注者,person_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)

阅读 233

收藏
2021-07-01

共1个答案

admin

您可以使用以下查询来获取每个人的关注者数量:

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 BYLIMIT会给你具体的人是继最受欢迎的人。

输出:

person_id, follower_person_id, cnt
-----------------------------------
1,         3,                  3

注意: 您可以使用变量来概括第二个查询的输出,以获取每个人关注的最受欢迎的人(这是每组最大的问题)。

2021-07-01