力扣614(MySQL)-二级关注者(中等)

发布时间 2023-04-04 22:04:46作者: 我不想一直当菜鸟

题目:

在 facebook 中,表 follow 会有 2 个字段: followee, follower ,分别表示被关注者和关注者。

请写一个 sql 查询语句,对每一个关注者,查询关注他的关注者的数目。

比方说:

 应该输出:

 解释:

B 和 D 都在在 follower 字段中出现,作为被关注者,B 被 C 和 D 关注,D 被 E 关注。A 不在 follower 字段内,所以A不在输出列表中。

注意:

被关注者永远不会被他 / 她自己关注。
将结果按照字典序返回。

解题思路:

建表语句:

1 Create table If Not Exists follow_614 (followee varchar(255), follower varchar(255));
2 Truncate table follow_614;
3 insert into follow_614 (followee, follower) values ('A', 'B'),('B', 'C'),('B', 'D'),('D', 'E');

直白点理解题意就是筛选出在follower列中出现的字母在followee出现的次数。

①首先从表中通过where条件筛选出在followee在follower出现的数据;

 ②以followee为分组和排序,统计出followee和follower出现的次数。

1 select f.followee,count(distinct f.follower) as num
2 from follow_614 f
3 where f.followee in(
4 select follower 
5 from follow_614
6 )
7 group by f.followee
8 order by f.followee

 

小知识:

SQL的执行顺序:

FROM > ON > JOIN >WHERE > GROUP BY > HAVING >SELECT > UNION > ORDER BY > LIMIT

SQL的书写顺序:

SELECT > FROM > WHERE > JOIN > ON > GROUP BY > HAVING > UNION > ORDER BY > LIMIT