获得积分最多的人(三)

获得积分最多的人(三)

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

我们知道,全是加的时候是怎么做的,但是出现了减,有点难办了,但是可以看看这个题目的解法:
可以使用一个sum(case when )语句,来逐个统计是加还是减,并统计最后的和,就可以写出如下代码:
select user.id, user.name,t.grade_sum from(
select user_id,sum(case type when 'add' then grade_num else -grade_num end) as grade_sum from grade_info group by user_id
having grade_sum=(select sum(case type when 'add' then grade_num else -grade_num end ) as grade_sum from grade_info group by user_id order by grade_sum desc limit 1) 
) t
join user
on t.user_id=user.id
order by user.id 



全部评论
最后一题,感谢一路有你
1 回复 分享
发布于 2021-08-24 12:40
相比于上一题,这一题增加了reduce,只需要在统计grade_sum时,将减去的情景考虑在内即可。 sum(case type when 'add' grade_num else - grade_num end) as grade_sum
1 回复 分享
发布于 2024-10-25 11:12 广东
最后一题也要向你学习,感谢!
点赞 回复 分享
发布于 2021-12-13 13:20
完结撒花
点赞 回复 分享
发布于 2021-09-24 16:19

相关推荐

09-25 00:00
已编辑
电子科技大学 Java
球球与墩墩:这不是前端常考的对象扁平化吗,面试官像是前端出来的 const flattern = (obj) => { const res = {}; const dfs = (curr, path) => { if(typeof curr === 'object' && curr !== null) { const isArray = Array.isArray(curr); for(let key in curr) { const newPath = path ? isArray ? `${path}[${key}]` : `${path}.${key}` : key; dfs(curr[key], newPath); } } else { res[path] = curr } } dfs(obj); return res; }
查看3道真题和解析
点赞 评论 收藏
分享
评论
15
2
分享

创作者周榜

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