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

获得积分最多的人(三)

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

第二题类似,主要区别是需要额外判断sum(grade_num)中的grade_num是加还是减。

可以通过(case when ...) 或 if(...)条件分支判断求和

这里依旧给出两种方案来进行解答。

方案一:

select u.id, u.name, sum(case when type='add' then grade_num else grade_num * -1 end) as grade_sum
from user u
join grade_info g
on u.id = g.user_id
group by u.id, u.name
having grade_sum = (select sum(case when type='add' then grade_num else grade_num * -1 end) as grade_sum
										from grade_info g1
										group by user_id
										order by grade_sum desc
										limit 0, 1)
order by u.id

方案二:with ... as ... 构建临时表

with t as (
	select user_id, sum(case when type='add' then grade_num else grade_num*-1 end) as grade_sum
	from grade_info
	group by user_id
)
select id, name, grade_sum
from user u
join t
on u.id = t.user_id
where grade_sum = (select max(grade_sum) from t)
order by id
SQL练习 文章被收录于专栏

已完成牛客的SQL练习。接下来是算法的练习

全部评论

相关推荐

11-01 08:48
门头沟学院 C++
伤心的候选人在吵架:佬你不要的,能不能拿户口本证明过户给我。。球球了
点赞 评论 收藏
分享
10-25 00:32
香梨想要offer:感觉考研以后好好学 后面能乱杀,目前这简历有点难
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务