首页 > 解决方案 > 从用户关注者中检索最关注的用户

问题描述

所以我有一个followers表(显然)包含哪些用户关注谁。

我想做的是找出用户 1的所有关注者 ( U1F),找出他们都关注的人 ( U1Ffol),然后使用U1Ffol, 总结U1F最集体关注的人。这可能没有意义,但我对如何在SQL中显示它有一个非常粗略的想法(请记住,我有点菜鸟,所以很抱歉,因为这显然是无效的代码,不是我想要的使用)。

/* retrieve user 1's followers */
SELECT follower AS U1F FROM followers WHERE following = 1;
/* retrieve who each of those users is following */
SELECT following AS U1Ffol FROM followers WHERE follower IN U1F;
/* find out who they're all following *collectively* */
SELECT 
  following AS User,
  COUNT(*) as f_count 
FROM U1Ffol 
GROUP BY User 
ORDER BY f_count DESC

这是表结构:

+----+----------+-----------+
| id | follower | following |
+----+----------+-----------+
|  1 |        2 |         1 |
|  2 |        5 |         1 |
|  3 |        9 |         1 |
|  4 |        1 |         4 |
|  5 |        1 |         5 |
|  6 |        4 |         1 |
+----+----------+-----------+

因此,在这种情况下,预期的输出将是(有趣的是,他们关注最多的人统称为User 1):

+------+---------+
| User | f_count |
+------+---------+
|    1 |       4 |
|    4 |       1 |
|    5 |       1 |
+------+---------+

希望这更有意义。

在过去的几天里,我一直试图弄清楚这个SQL ,但我对这门语言太陌生了,无法理解如何正确实现它。因此,所有帮助和提示将不胜感激,

干杯。

标签: mysqlsql

解决方案


低于你想要的 -

SELECT following AS User,
       COUNT(*) as f_count 
FROM (SELECT following
      FROM followers
      WHERE follower IN (SELECT follower
                         FROM followers
                         WHERE following = 1)) t
GROUP BY following 
ORDER BY f_count DESC;

推荐阅读