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 解题思路
- 将
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 |
+--------+--------+
- 对
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 |
+--------+---+