现有成绩表和学生表。注意, 成绩表中的学号与学生表中的学号关联,60分及格,另外可能有学生旷考所有考试科目。。2.用Oracle统计学生姓名及其考试总成绩,并按总成绩高低降序。(15分)3.查询所有考试两门或两门以上科目都不及格的学生姓名,包括旷考考生。
时间: 2024-12-08 14:18:15 浏览: 29
首先,我们需要创建一个SQL查询来满足这三个需求:
1. 统计学生姓名及其考试总成绩并按总成绩排序:
```sql
SELECT s.student_name, SUM(c.score) AS total_score
FROM students s
JOIN scores c ON s.student_id = c.student_id
WHERE c.score IS NOT NULL AND c.score >= 60
GROUP BY s.student_name
ORDER BY total_score DESC;
```
这个查询会从学生表(students)和成绩表(scores)中联接数据,计算每个学生的总分数,只考虑那些得分大于等于60(非0分或不及格)的情况。
2. 查询所有考试两门或两门以上科目都不及格的学生姓名,包括旷考考生:
```sql
WITH eligible_students AS (
SELECT student_id
FROM scores
WHERE score < 60 OR score IS NULL
GROUP BY student_id
HAVING COUNT(*) >= 2
)
SELECT s.student_name
FROM students s
LEFT JOIN eligible_students es ON s.student_id = es.student_id
WHERE es.student_id IS NULL;
```
这里我们首先通过子查询`eligible_students`找出所有不及格或旷考的学生(至少两门),然后在主查询中,对学生们进行左连接,如果某个学生不在子查询的结果集中,说明他们至少一门课程及格,因此结果就是两门或两门以上科目都不及格的学生。
阅读全文