- 学习:知识的初次邂逅
- 复习:知识的温故知新
- 练习:知识的实践应用
目录
一,原题力扣链接
二,题干
表:
Follow
+-------------+---------+ | Column Name | Type | +-------------+---------+ | followee | varchar | | follower | varchar | +-------------+---------+ (followee, follower) 是该表的主键(具有唯一值的列的组合)。 该表的每一行表示关注者关注了社交网络上的被关注者。 不会有用户关注他们自己。二级关注者 是指满足以下条件的用户:
- 关注至少一个用户,
- 被至少一个用户关注。
编写一个解决方案来报告 二级用户 及其关注者的数量。
返回按
follower
字典序排序 的结果表。结果格式如下所示。
示例 1:
输入: 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 不是二级关注者,但是她不关注任何人,所以我们不把她包括在结果表中。
三,建表语句
Create table If Not Exists Follow (followee varchar(255), follower varchar(255))
Truncate table Follow
insert into Follow (followee, follower) values ('Alice', 'Bob')
insert into Follow (followee, follower) values ('Bob', 'Cena')
insert into Follow (followee, follower) values ('Bob', 'Donald')
insert into Follow (followee, follower) values ('Donald', 'Edward')
四,分析
题解:
表 关注表
字段 被关注者,关注者
求二级关注者的关注数量 结果按照关注着用户的升序排序
第一步: 找出有被人关注的 被关注着
用子查询
select followee, follower
from follow
where followee in (select follower from follow);
第二步,简简单单的分组聚合 求出被关注者的关注人数 并排序
五,SQL解答
with t1 as (
select followee, follower from follow where followee in (select follower from follow)
)
select
followee as follower,count(follower) as num
from t1
group by followee
order by followee;
六,验证
七,知识点总结
- 子查询的运用 多列和多列发生判定的时候 用in
- 分组聚合的运用
- 排序的运用
- 学习:知识的初次邂逅
- 复习:知识的温故知新
- 练习:知识的实践应用