一、SQL语句执行顺序:from->join->group by->having->select->order by->limit
SQL题89 获得积分最多的人
原题链接:获得积分最多的的人
题目描述:
牛客每天有很多用户刷题,发帖,点赞,点踩等等,这些都会记录相应的积分。
有一个用户表(user),简况如下:
还有一个积分表(grade_info),简况如下:
第1行表示,user_id为1的用户积分增加了3分。
第2行表示,user_id为2的用户积分增加了3分。
第3行表示,user_id为1的用户积分减少了1分。
…
最后1行表示,user_id为3的用户积分减少了1分。
请你写一个SQL查找积分最高的用户的id,名字,以及他的总积分是多少(可能有多个),查询结果按照id升序排序,以上例子查询结果如下:
解答:
联表查询,因为只要求选择第一名,所以需要limit语句:0,1表示从第0条记录开始选,选择1条
select name, sum(grade_num) grade_sum
from user inner join grade_info
on user.id = grade_info.user_id
group by name // 如果by id或者user_id主键,牛客会报错 // 此处也可以写成user.name
order by grade_sum desc
limit 0, 1 // 此处limit 1也是一样的效果

二、SQL查询出每门课都大于80分的学生姓名
Course表如下:
SQL语句:
select name
from Course
group by name
having min(score)>80

另一种方法链接:SQL
版权声明:本文为m0_46378271原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。