Sql-测试5,6题解

本文详细介绍了四个SQL查询案例,包括查询未选修Java的学生姓名,不同老师所教课程的平均分排名,只选修一门课程的学生信息,以及按课程平均成绩和及格率排序。通过这些案例,读者可以学习到SQL在处理数据聚合和分组时的实用技巧。
摘要由CSDN通过智能技术生成

目录

1.查询没有选修java学生的姓名

2.查询不同老师所教不同课程的平均分从高到低显示:

3.查询出只选修一门课程的全部学生的学号和姓名:

4.按各科平均成绩从低到高和及格率的百分数从高到低顺序:


 

一、

6c89d2877586472894fcb2a73da42159.png

 相关的代码如下:

select sname
from students
where students.sid not in(select choices.sid
                         from choices
                         where cid='1003')

思路:

首先,我们知道学生姓名是在students表中的,那么全部的学号都在students表中,那么我们只需要选出选修了java课程的同学的学号,在这里用的是一个子查询语句。相关代码如上。

二、49539db600a045c5845b627f2b2d3922.png

 思路:

首先,这里是不同老师不同课程的平均分,那么就需要在分组的时候,加上课程,不然会报分组的异常,嗯,这个就是关键点,代码如下:

select teacher.TId  教师id, teacher.Tname  教师姓名, course.CId  课程id , avg(sc.score)  平均成绩
from teacher , sc , course
where teacher.TId =course.TId and course.CId = sc.CId
group by teacher.TId , teacher.Tname , course.CId
order by avg(sc.score) desc

 三、查询出只选修一门课程的全部学生的学号和姓名:

2bd5d5e2364a4d4a85e344d5fe96137a.png

 思路:

“只选修一门课程”,在这里我们需要按学号对其进行分组,再用having语句对其进行判断代码如下:

select sc.sid,sname,count(1) 课程数
from sc left join student
on sc.sid=student.sid
group by sc.sid,sname
having count(cid)=1

也可以这样:

select sc.sid,sname,(1) 课程数
from sc left join student
on sc.sid=student.sid
group by sc.sid,sname
having count(cid)=1

 四、按各科平均成绩从低到高和及格率的百分数从高到低顺序:95ce872b8264412d8630885603b37fa4.png

 思路:

首先,就是要将成绩换算成绩点,那么在这里我们可以在其中重新建立一个表来作为绩点的标识,还是看代码吧:

目录

一、


 

select sc.CId 课程号,avg(score) 平均成绩,(t.jige/t.num)*100 及格百分数
from sc,(
select CId,count(case when score>=60 then 1 end) jige,count(*) num
from sc
group by CId)t
where t.CId=sc.CId
group by t.CId
order by 及格百分数 desc,平均成绩

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值