SQL题89获得积分最多的人、SQL查询出每门课都大于80分的学生姓名

一、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版权协议,转载请附上原文出处链接和本声明。