题目
这道题目要求我们统计每个用户在牛客网的刷题情况,我们要做的事情如下:
1. 确定总体问题
我们需要统计每个用户在每个日期的累计通过题目数,包括用户的名字,以及截止到某天累计通过的题目总数。我们需要从用户表和刷题记录表中提取数据,使用窗口函数SUM来计算每个用户的累计通过题目数,并按日期升序排序输出。
2. 分析关键问题
- 连接表:将
user表和passing_number表连接起来,以便获取每个用户的刷题信息。 - 计算累计通过题目数:使用窗口函数
SUM计算每个用户的累计通过题目数。 - 排序输出:按日期升序排列输出结果。
3. 解决每个关键问题的代码及讲解
步骤1:连接表
我们使用JOIN将user表和passing_number表连接起来:
from
passing_number p
join user u on p.user_id = u.id
JOIN user u ON p.user_id = u.id:通过用户ID连接刷题记录表和用户表。
步骤2:计算累计通过题目数
我们使用窗口函数SUM计算每个用户的累计通过题目数:
sum(p.number) over (
partition by
u.name
order by
date
) as ps_num
SUM(p.number) OVER (PARTITION BY u.name ORDER BY date) AS ps_num:计算每个用户的累计通过题目数,按日期升序排列。
SUM(column) OVER ( ORDER BY date_column ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW )SUM(column):对指定列进行求和。
OVER:定义窗口的范围。
ORDER BY date_column:按日期排序。
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW:指定窗口的范围是从第一行到当前行
步骤3:排序输出
我们按日期升序排列输出结果:
order by
p.date
ORDER BY p.date:按日期升序排列。
完整代码
select
u.name as u_n,
p.date,
sum(p.number) over (
partition by
u.name
order by
date
) as ps_num
from
passing_number p
join user u on p.user_id = u.id
order by
p.date;
、
443

被折叠的 条评论
为什么被折叠?



