大家好,我是空空star,本篇带大家了解一道简单的力扣sql练习题。
文章目录
- 前言
- 一、题目:1729. 求关注者的数量
- 二、解题
- 1.正确示范①
- 提交SQL
- 运行结果
- 2.正确示范②
- 提交SQL
- 运行结果
- 3.正确示范③
- 提交SQL
- 运行结果
- 4.正确示范④
- 提交SQL
- 运行结果
- 5.正确示范⑤
- 提交SQL
- 运行结果
- 总结
前言
一、题目:1729. 求关注者的数量
表: Followers
+-------------+------+
| Column Name | Type |
+-------------+------+
| user_id | int |
| follower_id | int |
+-------------+------+
(user_id, follower_id) 是这个表的主键。
该表包含一个关注关系中关注者和用户的编号,其中关注者关注用户。
写出 SQL 语句,对于每一个用户,返回该用户的关注者数量。
按 user_id 的顺序返回结果表。
查询结果的格式如下示例所示。
输入:
Followers 表:
+---------+-------------+
| user_id | follower_id |
+---------+-------------+
| 0 | 1 |
| 1 | 0 |
| 2 | 0 |
| 2 | 1 |
+---------+-------------+
输出:
+---------+----------------+
| user_id | followers_count|
+---------+----------------+
| 0 | 1 |
| 1 | 1 |
| 2 | 2 |
+---------+----------------+
解释:
0 的关注者有 {1}
1 的关注者有 {0}
2 的关注者有 {0,1}
二、解题
1.正确示范①
提交SQL
select user_id,count(1) followers_count
from Followers
group by user_id
order by user_id;
运行结果
2.正确示范②
提交SQL
select user_id,count(*) followers_count
from Followers
group by user_id
order by user_id;
运行结果
3.正确示范③
提交SQL
select user_id,count(follower_id) followers_count
from Followers
group by user_id
order by user_id;
运行结果
4.正确示范④
提交SQL
select user_id,sum(1) followers_count
from Followers
group by user_id
order by user_id;
运行结果
5.正确示范⑤
提交SQL
select distinct user_id,
sum(1) over(partition by user_id) followers_count
from Followers
order by user_id;
运行结果
总结
正确示范①思路:
采用count(1)
先按用户id分组,再用count(1)统计出关注者的数量,再按用户id顺序;
正确示范②思路:
采用count(*)
先按用户id分组,再用count(*)统计出关注者的数量,再按用户id顺序;
正确示范③思路:
采用count(follower_id)
先按用户id分组,再用count(follower_id)统计出关注者的数量,再按用户id顺序;
正确示范④思路:
采用sum(1)
先按用户id分组,再用sum(1)统计出关注者的数量,再按用户id顺序;
正确示范⑤思路:
采用sum(1) over(partition by user_id)
通过partition by分组,用sum(1)统计出关注者的数量,用distinct去重后,再按用户id顺序。