检索选修四门以上课程的学生总成绩(不统计不及格的课程),并要求按总成绩的降序排列出来。正确的SELECT语句
时间: 2024-03-02 15:51:23 浏览: 399
以下是正确的 SQL SELECT 语句:
```
SELECT 学生姓名, SUM(成绩) AS 总成绩
FROM 成绩单
WHERE 成绩 >= 60
GROUP BY 学生姓名
HAVING COUNT(课程) >= 4
ORDER BY 总成绩 DESC;
```
注意这个语句假定成绩单表中有学生姓名、课程和成绩三个字段。如果表结构不同,需要相应修改字段名。同时,这个语句还假定及格分数是60分,如果需要修改及格分数,也需要修改相应的数值。
相关问题
检索选修2门以上课程的学生的学号和总成绩(不统计不及格的课程),并要求按总成绩的降序排列出来
为了检索选修了两门及以上课程且不包括不及格成绩的学生,我们需要基于学生选课表(如student_courses)和课程成绩表(如course_scores)来进行联合查询,并使用GROUP BY和HAVING子句来过滤条件。假设这两个表都有学生ID(student_id)和课程ID(course_id)的对应关系,同时course_scores表里有课程ID(course_id)和成绩(grade)字段。
下面是一个基本的SQL查询示例:
```sql
SELECT sc.student_id, SUM(CASE WHEN cs.grade >= '60' THEN cs.grade ELSE NULL END) AS total_grade
FROM student_courses sc
JOIN course_scores cs ON sc.course_id = cs.course_id
GROUP BY sc.student_id
HAVING COUNT(DISTINCT sc.course_id) >= 2
ORDER BY total_grade DESC;
```
这个查询做了以下事情:
1. `JOIN` 两个表:通过课程ID关联学生选课和成绩信息。
2. `CASE` 表达式:只累加成绩达到及格线(例如60分)以上的分数。
3. `GROUP BY` 学生ID:按学生分组计算总成绩。
4. `HAVING COUNT(DISTINCT sc.course_id) >= 2`:只保留选修过两门以上课程的学生。
5. `ORDER BY total_grade DESC`:按总成绩降序排列。
阅读全文