SQL查询语句完成以下查询:统计所有课程均及格学生的平均成绩,及格的门数,结果按平均成绩降序,及格门数降序排列。
时间: 2023-06-16 12:05:10 浏览: 151
假设有如下三张表:
- 学生表: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)` 表示只统计及格门数等于总门数的学生。最后按照平均成绩降序、及格门数降序排列结果。
sql语句查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩
以下是查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩的 SQL 语句:
```
SELECT s.学号, s.姓名, AVG(c.成绩) AS 平均成绩
FROM 学生 s
JOIN 成绩 c ON s.学号 = c.学号
WHERE c.成绩 < 60
GROUP BY s.学号, s.姓名
HAVING COUNT(c.学号) >= 2;
```
解释:
- `SELECT` 语句用于选择需要查询的字段,包括学号、姓名和平均成绩。
- `FROM` 语句指定查询的表格,这里是学生表格和成绩表格。
- `JOIN` 语句用于连接学生表格和成绩表格,连接条件是学生表格的学号等于成绩表格的学号。
- `WHERE` 语句用于筛选符合条件的行,这里是成绩小于 60 分的行。
- `GROUP BY` 语句用于按照学号和姓名对结果进行分组,这样可以计算每个学生的平均成绩。
- `HAVING` 语句用于对分组后的结果进行筛选,这里是选择有两门及其以上不及格课程的学生。
请注意,以上查询语句仅供参考,具体实现可能需要根据数据表格的具体情况进行调整。