查找特定人的大多数“热门”关注者。某人拥有的追随者越多,他们越“受欢迎”。
我需要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最受欢迎的关注者,依此类推…
例如,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)
您可以使用以下查询来获取每个人的关注者数量:
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在上面的查询中使用一个子句:
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会给你具体的人是继最受欢迎的人。
ORDER BY
LIMIT
person_id, follower_person_id, cnt ----------------------------------- 1, 3, 3
注意: 您可以使用变量来概括第二个查询的输出,以获取每个人关注的最受欢迎的人(这是每组最大的问题)。