sql 查询每门课最低分和最高分的学生记录
时间: 2023-10-01 14:05:53 浏览: 383
假设有一个名为`score`的表,包含学生ID(`student_id`)、课程ID(`course_id`)和分数(`score`)三个字段,可以使用以下SQL语句查询每门课程的最低分和最高分的学生记录:
```
SELECT s.course_id,
MAX(s.score) AS max_score,
MIN(s.score) AS min_score,
MAX(CASE WHEN s.score = max_score THEN s.student_id END) AS max_student_id,
MAX(CASE WHEN s.score = min_score THEN s.student_id END) AS min_student_id
FROM score s
GROUP BY s.course_id
```
这个SQL语句使用了聚合函数`MAX`和`MIN`,以及CASE语句来选择对应的学生ID。最终结果包含每门课程的ID、最高分、最低分以及对应的学生ID。
相关问题
sql查询每门课程被选修最高分最低分
您好!针对您的问题,可以使用以下 SQL 语句查询每门课程被选修的最高分和最低分:
```
SELECT course_name, MAX(score) AS highest_score, MIN(score) AS lowest_score
FROM scores
GROUP BY course_name;
```
其中,`scores` 表是包含了所有学生选课成绩的表,包括了学生姓名、课程名称、成绩等信息。在这个表中,每一行记录代表了一个学生的一门课程的成绩情况。
以上 SQL 语句会将 `scores` 表按照课程名称进行分组,然后分别计算每组中的最高分和最低分,并将结果返回。其中 `MAX(score)` 表示求最高分,`MIN(score)` 表示求最低分。
在学生选课表中,统计学生平均分大于 70 的成绩记录。包括学生学号、总分、平均 分、课程门数、课程最高分、最低分字段。
假设我们有以下的学生选课表(以MySQL语法为例):
```
CREATE TABLE `student_courses` (
`student_id` int(11) NOT NULL,
`course_id` int(11) NOT NULL,
`score` int(11) NOT NULL,
PRIMARY KEY (`student_id`,`course_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
```
其中,`student_id` 表示学生编号,`course_id` 表示课程编号,`score` 表示成绩。
我们可以使用以下的SQL查询语句来获取统计结果:
```
SELECT
student_id,
COUNT(*) AS course_num,
SUM(score) AS total_score,
MAX(score) AS max_score,
MIN(score) AS min_score,
AVG(score) AS avg_score
FROM
student_courses
GROUP BY
student_id
HAVING
AVG(score) > 70;
```
这个SQL查询语句会对 `student_courses` 表进行聚合操作,按照 `student_id` 分组,统计每个学生的课程门数、总分、最高分、最低分和平均分,并筛选出平均分大于 70 的学生记录。
如果你使用的是其他数据库,语法可能会有所不同,但基本的思路是相同的。