统计所有课程均及格学生的平均成绩,及格的门数,结果按平均成绩降序,及格门数降序排列。
时间: 2023-11-11 18:02:08 浏览: 46
假设有以下两个表:
* `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)` 表示只统计及格门数等于总门数的学生。最后按照平均成绩降序、及格门数降序排列结果。
相关问题
5.查询所有学生除了选修1号课程外所有成绩均及格的学生的学号和平均成绩,其结果按平均成绩的降序排列。
可以使用如下 SQL 语句来查询:
```
SELECT SC.Sno, AVG(SC.Grade) AS avg_grade
FROM SC
WHERE SC.Sno NOT IN (
SELECT SC1.Sno
FROM SC AS SC1
WHERE SC1.Cno = 1 AND SC1.Grade < 60
)
GROUP BY SC.Sno
HAVING MIN(SC.Grade) >= 60
ORDER BY avg_grade DESC;
```
解释如下:
首先在子查询中找到选修了 1 号课程且成绩不及格的学生,使用 `NOT IN` 来排除这些学生。
之后在外层查询中,使用 `GROUP BY` 对学生进行分组,计算每个学生的平均成绩。
最后使用 `HAVING` 过滤掉不符合条件的学生(即所有成绩均及格的学生),并按平均成绩的降序排列。
查询成绩不及格的学生学号、课号和成绩,并按成绩降序排列
假设成绩表的表名为`score_table`,包含字段`student_id`(学生学号)、`course_id`(课号)和`score`(成绩),可以使用以下SQL语句查询成绩不及格的学生学号、课号和成绩,并按成绩降序排列:
```
SELECT student_id, course_id, score
FROM score_table
WHERE score < 60
ORDER BY score DESC;
```
其中,`WHERE`子句筛选出成绩小于60分的记录,`ORDER BY`子句按照成绩降序排列。