标签:02 01 记录 查询 score 分组 SQL id 五十
前言:
创建以下四张表:①:课程表
②:成绩表
③:学生表
④:教师表
1.查询课程编号为“”01“”的课程比“02”的课程成绩高的所有学生的学号(重点)
SELECT
a.s_id "s_no",
c.s_name,
a.s_score "01",
b.s_score "02"
FROM
( SELECT s_id, c_id, s_score FROM score WHERE c_id = '01' ) AS a
INNER JOIN ( SELECT s_id, c_id, s_score FROM score WHERE c_id = '02' ) AS b ON a.s_id = b.s_id
INNER JOIN student AS c ON c.s_id = a.s_id
WHERE
a.s_score > b.s_score
结果如图所示
浅谈思路:( SELECT s_id, c_id, s_score FROM score WHERE c_id = '01' ) AS a 首先先从课程表中查询出选了01课的所有学生建为a表
INNER JOIN ( SELECT s_id, c_id, s_score FROM score WHERE c_id = '02' ) AS b ON a.s_id = b.s_id 同样从课程表中查询选了02课的所有学生建为b表,并且进行连接。连接条件为:
ON a.s_id = b.s_id 采用学生编号将这两张表连接起来
INNER JOIN student AS c ON c.s_id = a.s_id 再连接一张学生表,把学生的名字查询出来
WHERE
a.s_score > b.s_score 查询01课的成绩大于02课的成绩
SELECT
a.s_id "s_no",
c.s_name,
a.s_score "01",
b.s_score "02"
FROM
最后查询出学生编号,学生姓名,学生的01课程成绩,02课程成绩即可。
2.查询出平均成绩大于60分的学生的学号和成绩
Select s_id,avg(s_score)
from score
GROUP BY s_id HAVING avg(s_score)>60
查询结果如图所示
浅谈思路:
Select s_id,avg(s_score) 查询出学生的ID,和成绩的平均值
from score 从成绩表中查询
GROUP BY s_id HAVING avg(s_score)>60
group by 分组 [学号]
having 分组条件 [平均成绩大于60分:avg(成绩 ) >60]
引用一下https://blog.csdn.net/qq_38962853/article/details/73838626解释一下group by的用法
当SELECT 后 既有 表结构本身的字段,又有需要使用聚合函数(COUNT(),SUM(),MAX(),MIN(),AVG()等)的字段,就要用到group by分组,查询的限定条件里有需要用聚合函数计算的字段时也需要用分组,比如:
select avg(grade) from cs
查询选课表(cs)中学生的总成绩(grade);这里就不用分组;
又如:
select sno,sum(grade) from cs group by sno
查询选课表里每个学生的总成绩,这里就要用分组,分组的依照字段必须是select 后没有被计算过的原始字段;
以上是分组用法。
标签:02,01,记录,查询,score,分组,SQL,id,五十 来源: https://www.cnblogs.com/whiplash/p/16380478.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。