【发布时间】:2017-04-07 19:32:09
【问题描述】:
为这些人找到最“受欢迎”的追随者。一个人的追随者越多, 它们很“受欢迎”。
我需要 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,person_id 3),person_id 2 共有 2 个关注者(person_id 1,person_id 4),person_id 3 有 共有 3 个关注者(person_id 1、person_id 2、person_id 4)和 person_id 4 共有 1 个关注者(person_id 3)。
因此,person_id 3 是 person_id 1 最受欢迎的追随者, person_id 1 是 person_id 2、person_id 1(或 person_id 2) 是 person_id 3 和 person_id 3 最受欢迎的追随者 person_id 4 最受欢迎。
这里是查询...
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
上面的查询输出是
person_id, follower_person_id, cnt
-----------------------------------
1, 3, 3
Here is explanation of above query
此查询仅适用于为特定人查找受欢迎的人,但 我想为所有人找到他们最“受欢迎”的追随者。
所以输出应该是这样的
person_id, follower_person_id, cnt
-----------------------------------
1, 3, 3
2, 1, 2
3, 1, 2
4, 3, 3
现在我又多了一个person table
id | name
1 John
2 Ali
3 Rohn
4 Veronica
现在我想将此 id 转换为人名。
最终输出应该像
person_name, follower_person_name, cnt
--------------------------------------
John, Rohn, 3
Ali, John, 2
Rohn, John, 2
Veronica, Rohn, 3
我需要 sql 查询来获取这些数据。
【问题讨论】:
-
你如何定义“他们最“受欢迎”的追随者。” ...请解释清楚..
-
Person_id 1 共有 2 个关注者(person_id 2,person_id 3),person_id 2 共有 2 个关注者(person_id 1,person_id 4),person_id 3 共有 3 个关注者(person_id 1,person_id 2,person_id 4) 和 person_id 4 共有 1 个关注者 (person_id 3)。因此,person_id 3 是 person_id 1 最受欢迎的粉丝,person_id 1 是 person_id 2 最受欢迎的粉丝,person_id 1(或 person_id 2)是 person_id 3 最受欢迎的粉丝,person_id 3 是 person_id 4 最受欢迎的粉丝。@scaisEdge跨度>