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

获得积分最多的人(二)

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

首先读问题:获取积分最多的人 !注意:可能不止一个人 可能好几个人积分doush
选取 id name 总积分 积分排名=1的
select user_id,name,s_grade from
#这个括号里面查询了 id name 总积分 总积分排名
(
select user_id, name,s_grade,DENSE_RANK() over(order by s_grade desc) r_grade
FROM
#括号里面的表查询了 id ,每人总积分
(
SELECT user_id ,sum(grade_num) s_grade
from grade_info
group by user_id
) a
left join
user u
ON a.user_id=u.id
) f
where f.r_grade=1

网友方法 很清晰 ,代码简洁 牛逼

!创建临时表 id name 总分
with tmp_table as (
select t1.id, t1.name, sum(t2.grade_num) as grade_sum
from user as t1 join grade_info as t2
on t1.id = t2.user_id
group by t1.id
)
!再从临时表里面选 id name 总分=最大值得
select id, name, grade_sum
from tmp_table
where grade_sum = (select max(grade_sum) from tmp_table)
order by id;

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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