查找数据库原理课程平均分最高的班级中数据库原理课程的最低分
时间: 2024-03-20 17:42:21 浏览: 97
可以使用子查询和嵌套的聚合函数来完成此查询:
```
SELECT MIN(e.grade) AS min_grade
FROM Enrolled e
JOIN (
SELECT s.class, AVG(e.grade) AS avg_grade
FROM Students s
JOIN Enrolled e ON s.sid = e.sid
JOIN Course c ON e.cid = c.cid
WHERE c.cname = '数据库原理'
GROUP BY s.class
ORDER BY avg_grade DESC
LIMIT 1
) t ON e.sid = t.sid
JOIN Course c ON e.cid = c.cid
WHERE c.cname = '数据库原理';
```
解释一下查询语句的各个部分:
- 内层查询语句:`SELECT s.class, AVG(e.grade) AS avg_grade FROM ...`,选择班级和该班级学生的数据库原理平均分,使用 `AVG` 聚合函数计算平均分,并按平均分降序排序,只选取平均分最高的班级(使用 `LIMIT 1`)。
- 外层查询语句:`SELECT MIN(e.grade) AS min_grade FROM ...`,选择该班级学生的数据库原理最低分,使用 `MIN` 聚合函数计算最低分。
- `JOIN` 子句将三个表联接起来,筛选出数据库原理课程的选课记录和平均分最高的班级的选课记录。
- `WHERE` 子句筛选出数据库原理课程的记录。
需要注意的是,如果平均分最高的班级中有多个学生的最低分相同,这个查询只会返回其中一个学生的最低分。如果需要返回所有最低分相同的学生,可以考虑使用窗口函数等技术。
阅读全文