LeetCode--614. 二级关注者

78 阅读1分钟

1 题目描述

表: Follow

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| followee    | varchar |
| follower    | varchar |
+-------------+---------+

(followee, follower) 是该表的主键 (具有唯一值的列的组合) 该表的每一行表示关注者关注了社交网络上的关注者 不会有用户关注他们自己

二级关注者 是指满足以下条件的用户:

  • 关注至少一个用户
  • 被至少一个用户关注. 编写一个解决方案来报告二级用户 及其关注者的数量 返回按 follower 字典序排序 的结果表

2 测试用例

输入: Follow table:

+----------+----------+
| followee | follower |
+----------+----------+
| Alice    | Bob      |
| Bob      | Cena     |
| Bob      | Donald   |
| Donald   | Edward   |
+----------+----------+

输出:

+----------+-----+
| follower | num |
+----------+-----+
| Bob      | 2   |
| Donald   | 1   |
+----------+-----+

解释: 用户 Bob 有 2 个关注者. Bob 是二级关注者, 因为他关注了 Alice, 所以我们把他包括在结果表中 用户 Donald 有 1 个关注者. Donald 是二级关注者, 因为他关注了 Bob, 所以我们把他包括在结果表中 用户 Alice 有 1 个关注者. Alice 不是二级关注者, 但是她不关注任何人, 所以我们不把她包括在结果表中

3 解题思路

  1. Follow 自关联, 查找满足条件的用户: 有关注其他人, 有被其他人关注
SELECT a.*
FROM Follow AS a
         inner join Follow AS b on a.followee = b.follower
-- 或者
SELECT *
FROM Follow
where followee in (SELECT distinct follower FROM Follow)

查询结果

+--------+--------+
|followee|follower|
+--------+--------+
|Bob     |Cena    |
|Bob     |Donald  |
|Donald  |Edward  |
+--------+--------+
  1. followee 分组统计数量
SELECT followee AS follower, COUNT(*) AS num
FROM Follow where followee in (SELECT distinct follower FROM Follow)
GROUP BY followee
-- 或者
SELECT a.followee AS follower, COUNT(*) AS num
FROM Follow AS a
         inner join Follow AS b on a.followee = b.follower
GROUP BY a.followee

查询结果

+--------+---+
|follower|num|
+--------+---+
|Bob     |2  |
|Donald  |1  |
+--------+---+