修正Oracle SQL嵌套子查询,输出指定两门课程的最低分
问题解决:查询指定课程的最低分数
需求说明
需要编写Oracle SQL查询,展示“Software Engineering”和“Computer Programming”两门课程的名称及其最低分数,将最低分列命名为MIN_MARK,结果按课程名称降序排列。
原查询的错误点
原嵌套子查询在WHERE条件中使用AND同时匹配两个不同的课程名称,这会导致没有符合条件的数据(同一课程名称不可能同时等于两个不同值),因此无法输出两门课程的结果。
预期输出
| subject_name | MIN_MARK |
|---|---|
| Computer Programming | 65 |
| Software Engineering | 61 |
修正后的SQL语句
SELECT s.subject_name, MIN(m.value) AS MIN_MARK FROM subject s JOIN mark m ON s.subject_id = m.subject_id WHERE LOWER(s.subject_name) IN ('software engineering', 'computer programming') GROUP BY s.subject_name ORDER BY s.subject_name DESC;
关键修正点说明
- 用
IN替代AND:IN可以匹配列表中的任意一个值,正确筛选出目标的两门课程 - 大小写兼容:通过
LOWER()函数统一转换字符串大小写,避免因数据中大小写不一致导致的匹配失效 - 聚合与分组:使用
MIN()计算最低分,配合GROUP BY s.subject_name确保按课程分组统计 - 排序:
ORDER BY s.subject_name DESC实现结果按课程名称降序排列
内容的提问来源于stack exchange,提问作者Pradyumna P Rao
相关产品推荐
相关产品推荐

