题解 | #获得积分最多的人(一)#
获得积分最多的人(一)
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练习。接下来是算法的练习