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

获得积分最多的人(三)

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

select user.id, name, total_num
from
    user
left outer join
    (select user_id, sum(case type when 'add' then grade_num else  -1*grade_num end) as total_num
	from grade_info
	group by user_id
    order by total_num) as grade
on user.id = grade.user_id
group by user.id
having total_num = (select total_num
                    from (select user_id, sum(case type when 'add' then grade_num else  -1*grade_num end) as total_num
						from grade_info
						group by user_id
						order by total_num desc) as grade
                     limit 0,1)
order by user.id;
  1. 窗口函数很久没复习,有一些生疏,尤其这个case()函数。

  2. 仔细观察本题,其实和上一题一样,只要运用窗口函数将右联结的临时表grade形成与上一题的一样的结构,那么整体编码是不需要修改的。

MySQL试题答案解析 文章被收录于专栏

MySQL在线编程重点试题解析

全部评论

相关推荐

10-15 10:23
门头沟学院 Java
牛可乐的头像真牛:赶紧举报,这公司绝对是诈骗的,等你签约后工作一两个月后根据合同漏洞把你开除,并且要求你赔偿3w培训费,996是为了提前筛选心甘情愿签下合同容易受骗的群体,纯粹面向校招生精心设计的骗局
你见过哪些工贼行为
点赞 评论 收藏
分享
10-03 17:08
已编辑
西安电子科技大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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