统计牛客每个用户刷题信息

牛客每个人最近的登录日期(六)

http://www.nowcoder.com/questionTerminal/572a027e52804c058e1f8b0c5e8a65b4

两种方法:

  • 使用窗口函数SUM,将日期作为“窗口”计算累加刷题数量
  • 使用自联结

窗口函数

SELECT name AS u_n,date,
SUM(number) OVER (PARTITION BY user_id ORDER BY date) AS ps_num
FROM passing_number AS p
INNER JOIN user
ON user.id=p.user_id
GROUP BY date,u_n
ORDER BY date,name

使用自联结

SELECT name AS u_n,date,ps_num
FROM (
    SELECT p1.user_id,p1.date,SUM(p2.number)AS ps_num
    FROM  passing_number AS p1,passing_number AS p2
    WHERE p1.date>=p2.date
    AND p1.user_id=p2.user_id
    GROUP BY p1.date,p1.user_id
    ) AS p
INNER JOIN user
ON user.id=p.user_id
GROUP BY date,u_n
ORDER BY date,name

遇到这类问题,使用窗口函数最方便,代码也比较简洁

全部评论
窗口函数里有考虑过用户登录但是没有刷题的情况吗?感觉题目描述这里--“但是存在登录了没刷题的情况,不会存在刷题表里面,有提交代码没有通过的情况,但是会记录在刷题表里,只不过通过数目是0。” 有点难理解,我这里直接理解成了登录没刷题,passing_number表里是没有记录的,如果这样的话你这里应该是找不到登录却没刷题的记录的。
点赞 回复 分享
发布于 2021-04-02 10:10

相关推荐

点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
14
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务