SQL查询语句完成以下查询:统计所有课程均及格学生的平均成绩,及格的门数,结果按平均成绩降序,及格门数降序排列。
时间: 2023-06-16 14:05:10 浏览: 395
假设有如下三张表:
- 学生表:student(sid, sname)
- 课程表:course(cid, cname)
- 成绩表:score(sid, cid, score)
可以使用如下 SQL 查询语句来实现该需求:
```
SELECT AVG(s.avg_score) AS avg_score, s.pass_course_num
FROM (
SELECT sc.sid, COUNT(*) AS pass_course_num, AVG(sc.score) AS avg_score
FROM score sc
WHERE sc.score >= 60
GROUP BY sc.sid
) AS s
GROUP BY s.pass_course_num
ORDER BY avg_score DESC, s.pass_course_num DESC;
```
该查询语句的主要思路是:
- 内层查询语句先找出所有及格的学生及其及格的门数和平均成绩;
- 外层查询语句根据及格门数对内层查询语句的结果进行分组,并计算每个分组的平均成绩;
- 最后按照平均成绩降序和及格门数降序排列查询结果。
相关问题
统计所有课程均及格学生的平均成绩,及格的门数,结果按平均成绩降序,及格门数降序排列。
假设有以下两个表:
* `students` 表,包含学生姓名和学号信息
* `grades` 表,包含学生课程成绩信息,每行记录包括学号、课程号、分数等三个字段
则可以使用以下 SQL 语句进行查询:
```
SELECT AVG(g.score) AS avg_score, COUNT(DISTINCT g.course_id) AS num_passed_courses, s.name, s.student_id
FROM students s
JOIN grades g ON s.student_id = g.student_id
WHERE g.score >= 60
GROUP BY s.name, s.student_id
HAVING COUNT(DISTINCT g.course_id) = (SELECT COUNT(*) FROM courses)
ORDER BY avg_score DESC, num_passed_courses DESC
```
其中,`courses` 表为所有课程信息表,`COUNT(DISTINCT g.course_id)` 表示该学生及格的门数,`HAVING COUNT(DISTINCT g.course_id) = (SELECT COUNT(*) FROM courses)` 表示只统计及格门数等于总门数的学生。最后按照平均成绩降序、及格门数降序排列结果。
以课本上S、 C、SC这个三个关系为例。完成1:姓名中包含“阳”字学生的所选择程成绩;2:按照学生统计某一门课程的成绩、并按照降序排列;3:输出数据库原理课程不及格学生信息;4:选出平均成绩优秀的学生,平均分>90的学生 5. 选择了所有课程的学生信息,6 没有选择任何一门课程学生的信息用sql语句
好的,根据您的问题,我可以给出以下 SQL 语句:
1. 姓名中包含“阳”字学生的所选择程成绩:
```
SELECT SC.Grade
FROM SC
JOIN S ON SC.Sno = S.Sno
WHERE S.Sname LIKE '%阳%' -- 姓名中包含“阳”字的学生
```
2. 按照学生统计某一门课程的成绩,并按照降序排列:
```
SELECT S.Sno, S.Sname, SC.Grade
FROM SC
JOIN S ON SC.Sno = S.Sno
WHERE SC.Cno = '课程编号' -- 某一门课程的编号
ORDER BY SC.Grade DESC -- 按照成绩降序排列
```
3. 输出数据库原理课程不及格学生信息:
```
SELECT S.Sno, S.Sname, SC.Grade
FROM SC
JOIN S ON SC.Sno = S.Sno
JOIN C ON SC.Cno = C.Cno
WHERE C.Cname = '数据库原理' AND SC.Grade < 60 -- 数据库原理课程不及格学生
```
4. 选出平均成绩优秀的学生,平均分>90的学生:
```
SELECT S.Sno, S.Sname, AVG(SC.Grade) AS AvgGrade
FROM SC
JOIN S ON SC.Sno = S.Sno
GROUP BY S.Sno, S.Sname
HAVING AVG(SC.Grade) > 90 -- 平均成绩>90的学生
```
5. 选择了所有课程的学生信息:
```
SELECT S.Sno, S.Sname
FROM S
WHERE NOT EXISTS (
SELECT C.Cno
FROM C
WHERE NOT EXISTS (
SELECT SC.Cno
FROM SC
WHERE SC.Sno = S.Sno AND SC.Cno = C.Cno
)
)
```
6. 没有选择任何一门课程学生的信息:
```
SELECT S.Sno, S.Sname
FROM S
WHERE NOT EXISTS (
SELECT SC.Cno
FROM SC
WHERE SC.Sno = S.Sno
)
```
以上是针对您问题的 SQL 语句,希望对您有所帮助。
阅读全文