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

获得积分最多的人(三)

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练习。接下来是算法的练习

全部评论

相关推荐

找不到工作死了算了:没事的,雨英,hr肯主动告知结果已经超越大部分hr了
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务