力扣614-二级关注者

表: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 不是二级关注者,但是她不关注任何人,所以我们不把她包括在结果表中。

思路:

第一步,确定需要被统计的用户范围。用户是否"关注过别人"可以通过 follower 列判断,因此我们先从 Follow 表中取出所有出现过的 follower(去重后形成一个集合)。接着在原表中只保留那些 followee 落在该集合中的记录,这样筛出来的 followee 就是"既当过 follower 的用户",也就是题目要求的统计对象。

第二步,对筛选后的记录进行分组聚合。筛选条件执行后,表中剩下的每一行都表示"有人关注了某个符合条件的 followee"。因此只需要按 followee 分组,并对组内记录计数,得到该用户被关注的次数。计数时使用 COUNT(*) 更稳健,含义是统计关注关系记录的条数。

最后输出 followee 以及对应的关注次数即可。需要注意的是,SQL 中一个查询块只能有一个 GROUP BY 子句,因此只保留一次按 followee 分组即可;如果在 SELECT 中把 followee 起别名为 follower,也不意味着要再按 follower 分组,本质仍然是同一个字段。

代码:

sql 复制代码
select 
followee as follower,
count(follower) as num
from Follow
where followee in (select distinct follower from Follow)
group by followee
order by follower;

代码2:

sql 复制代码
select
  f.followee as follower,
  count(*) as num
from follow f
where exists (
  select 1
  from follow x
  where x.follower = f.followee
)
group by f.followee
order by f.followee;
相关推荐
倔强的石头_13 小时前
《Kingbase护城河》——猎捕慢查询:执行计划的微观解析与索引调优实战
数据库
SelectDB14 小时前
Apache Doris Python UDF:让 SQL 直接调用 Python 生态,支撑 Agent 时代复杂业务逻辑
大数据·数据库·python
ApacheSeaTunnel17 小时前
当多表数据涌入,Apache SeaTunnel 如何巧妙化解主键冲突?
大数据·开源·数据集成·seatunnel·技术分享·数据同步
jiayou642 天前
KingbaseES 表级与列级加密完全指南
数据库·后端
GBASE3 天前
G术时刻 |GBase 8s数据库事务并发控制之封锁技术介绍(下)
数据库
xiezhr3 天前
逛GitHub发现了一款免费的带AI功能的数据库管理工具
数据库·ai编程·dba
大大大大晴天4 天前
Hudi Metadata Table 与 Hive Sync (HMS)怎么选?
大数据
唐青枫4 天前
MySQL JSON 实战详解:从存储、查询、更新到 JSON_TABLE 与索引
sql·mysql
吃糖的小孩4 天前
给 QQ AI 机器人设计“可控记忆”:会话摘要、手动长期记忆与角色卡边界
数据库
手可摘星辰7774 天前
一次线上FlinkCDC异常排查复盘
大数据·flink