题解 | #最差是第几名(一)#

最差是第几名(一)

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

弯路饶了不少,最差——设其为每个等级的最后一个,则就是个累加过程。
1、case when + 子查询

select grade,
case grade when 'A' then (select sum(number) from class_grade where grade <= 'A')
           when 'B' then (select sum(number) from class_grade where grade <= 'B')
           when 'C' then (select sum(number) from class_grade where grade <= 'C')
           when 'D' then (select sum(number) from class_grade where grade <= 'D')
           else (select sum(number) from class_grade where grade <= 'E')
end as t_rank
from class_grade
order by grade;

2、开窗函数 sum() over() 更简便

select grade, sum(number) over(order by grade) as t_rank
from class_grade 
order by grade;

3、联结

SELECT a.grade,SUM(b.number) AS t_rank
FROM class_grade a
inner join class_grade b
ON a.grade >= b.grade
GROUP BY a.grade
ORDER BY a.grade asc;
全部评论

相关推荐

11-19 18:44
已编辑
成都理工大学 Java
程序员花海:我面试过100+校招生,大厂后端面试不看ACM,竞赛经历含金量低于你有几份大厂实习 这个简历整体来看不错 可以海投
如何写一份好简历
点赞 评论 收藏
分享
未知的命运:大佬这都找不到我还找啥啊
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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