题解 | #牛客每个人最近的登录日期(六)#

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

https://www.nowcoder.com/practice/572a027e52804c058e1f8b0c5e8a65b4

#逆天的题目说明,搞几个序号很难?逆天的文字组织,真的是人?
/*牛客每天有很多人登录,请你统计一下牛客每个用户刷题情况,包括:
 用户的名字,以及截止到某天(他妈的这句话意思是有记录的每天都统计),累计总共通过了多少题。
 说明:
 1.不存在没有登录却刷题的情况,
 2.存在登录了没刷题的情况,此情况不会存在刷题表里面,
 3.存在提交代码没有通过的情况,此情况的通过数量将记录在刷题表里,对应的通过数量位0。
 
 
 输出要求
 包括: 
 1.用户的名字,
 2.每个用户,每天都统计累计总共通过了多少题
 3.有登录却没有刷题的天数的数据不需要输出
 4.查询结果先按照日期升序排序,再按照姓名升序排序,
 */



/*select
*
from login l left join passing_number p
on l.user_id=p.user_id and l.date=p.date
left join user as  u
on l.user_id=u.id*/
#login和通过数目表按用户id和登陆日期,双绑定条件匹配好,user也匹配好

/*1.截止到某天,是按每一天计数
2.累计总共通过,累加
3.先用窗口处理累加,再用where或窗口row_number挑选用户对应的最大日期
最好用窗口,不会动原数据
*/

/*select
t1.name1 as u_n,
t1.date1 as date,
t1.ps_num as ps_num
from
(select
l.user_id as user_id1 , l.date as date1, p.number as number1, u.name as name1
,row_number()over(partition by l.user_id order by l.date desc) as t_rank
,sum(p.number)over(partition by l.user_id order by l.date asc) as ps_num
from login l left join passing_number p
on l.user_id=p.user_id and l.date=p.date
left join user as  u
on l.user_id=u.id) as t1
where t1.t_rank=1*/

#这样写是截止到最后一天,

select
u.name as u_n
,l.date as date
,sum(p.number)over(partition by l.user_id order by l.date asc) as ps_num
from login l left join passing_number p
on l.user_id=p.user_id and l.date=p.date
left join user as  u
on l.user_id=u.id
#上面这样写,没满足“有登录没有刷题的那一天不需要输出”
where p.number is not null
order by date asc, u_n asc

全部评论

相关推荐

01-30 22:03
门头沟学院 Java
用微笑面对困难:我滴妈,【俩月】【实习】【主管】仨debuff吃满了,独立设计开发的项目写了绝大占比的运营板块,你独立开发,那维护、问题复盘、日志更新、bug、策划书全是自己整的? 不建议写那么大,可以从小出发更容易
点赞 评论 收藏
分享
2025-12-21 21:22
安徽农业大学 运营
程序员花海:实习和校招简历正确格式应该是教育背景+实习+项目经历+个人评价 其中项目经历注意要体现业务 实习经历里面的业务更是要自圆其说 简历模板尽可能保持干净整洁 不要太花哨的
实习简历求拷打
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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