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

获得积分最多的人(一)

http://www.nowcoder.com/practice/1bfe3870034e4efeb4b4aa6711316c3b

通用解法

思路:对user_id分组后取sum(grade_num),因为题目保证了最高的只有一位,那么就可以对sum(grade_num)进行逆序排序,然后使用limit 0, 1获取最高的积分数,最后联立两表即可。

完整代码:

select t1.name, t2.grade_sum
from user as t1, (select user_id, sum(grade_num) as grade_sum 
									from grade_info 
									group by user_id 
									order by grade_sum desc 
									limit 0, 1) as t2
where t1.id = t2.user_id

特殊解法

思路:由于本题的user表比较特殊,不使用子查询也是可以的,思路同方法一一样。

但是这里是需要取出 user.name,需要对user.name进行group by操作,而因为在user表中name和id是一一对应的,所以group by user.name 也是可取的

完整代码:

select t1.name, sum(t2.grade_num) as grade_sum
from user t1 join grade_info t2
on t1.id = t2.user_id
group by t1.id, t1.name
order by grade_sum desc
limit 0, 1
SQL练习 文章被收录于专栏

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

全部评论

相关推荐

过往烟沉:我说什么来着,java就业面就是广!
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务