题解 | #获得积分最多的人(三)#

获得积分最多的人(三)

http://www.nowcoder.com/practice/d2b7e2a305a7499fb310dc82a43820e8

首先,本题的思路较上一题的思路就是多一个case...when...函数;

本题同样需要采用两层子查询,第一层运用case...when...函数建立一个各用户累计积分的表t;

接着,在表t的基础上,将各用户的累计积分按降序排列,得到表t1;

最后,将user表同表1按id进行表连接,对连接之后的表筛选出id,name,累计积分字段,再按id升序排列。 代码如下:

select u.id,u.name,t1.ts from user u join
(select t.ui tu,t.s ts,rank()over(order by t.s desc) rk from 
(select user_id ui,sum(case when type = 'add' then 1*(grade_num) 
when type = 'reduce' then -1*(grade_num) end) s
from grade_info g 
group by ui) t) t1
on u.id = t1.tu
where t1.rk = 1
order by u.id
全部评论

相关推荐

昨天 18:42
复旦大学 Java
点赞 评论 收藏
分享
2025-11-02 23:41
内蒙古工业大学 Java
代码飞升_不回私信人...:别这样贬低自己,降低预期,放平心态,跟昨天的自己比。做好自己,反而会效率更高心态更好,加油兄弟
点赞 评论 收藏
分享
2025-12-14 11:43
黑龙江大学 Java
用微笑面对困难:确实比较烂,可以这么修改:加上大学的qs排名,然后大学简介要写一些,然后硕士大学加大加粗,科研经历第一句话都写上在复旦大学时,主要负责xxxx,简历左上角把学校logo写上,建议用复旦大学的简历模板
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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