用SQL语言实现收集学院中所有同学多门课程的分数,数据集的每一行表示一条学生选课的成绩,最后计算各个班级内不同课程的最高分、最低分、平均分。
时间: 2024-02-15 17:02:33 浏览: 27
好的,以下是我给出的 SQL 语句,可以实现你的需求:
```
SELECT
class,
course,
MAX(score) AS max_score,
MIN(score) AS min_score,
AVG(score) AS avg_score
FROM
scores
GROUP BY
class, course;
```
其中,`scores` 表是学生选课成绩的数据集,包括学生姓名、班级、课程和分数等信息。以上 SQL 语句会根据班级和课程进行分组,计算出每个班级内不同课程的最高分、最低分和平均分。
相关问题
数据源包括学生姓名、学生id、学生班级、语文得分、数学得分、英语得分、物理得分、化学得分、生物得分,请使用MySQL语言编写一段代码,来收集学院中所有同学多门课程的分数,数据集的每一行表示一条学生选课的成绩,最后计算各个班级内不同课程的最高分、最低分、平局分
假设我们有一个名为`student_score`的数据表来存储学生的成绩信息,包含如下字段:
- `id`:学生的唯一标识
- `name`:学生的姓名
- `class`:学生所在的班级
- `chinese`:学生的语文成绩
- `math`:学生的数学成绩
- `english`:学生的英语成绩
- `physics`:学生的物理成绩
- `chemistry`:学生的化学成绩
- `biology`:学生的生物成绩
则可以使用如下代码来查询各个班级内不同课程的最高分、最低分、平均分:
```
-- 查询各个班级内的不同课程的最高分、最低分、平均分
SELECT class,
MAX(chinese) AS max_chinese,
MIN(chinese) AS min_chinese,
AVG(chinese) AS avg_chinese,
MAX(math) AS max_math,
MIN(math) AS min_math,
AVG(math) AS avg_math,
MAX(english) AS max_english,
MIN(english) AS min_english,
AVG(english) AS avg_english,
MAX(physics) AS max_physics,
MIN(physics) AS min_physics,
AVG(physics) AS avg_physics,
MAX(chemistry) AS max_chemistry,
MIN(chemistry) AS min_chemistry,
AVG(chemistry) AS avg_chemistry,
MAX(biology) AS max_biology,
MIN(biology) AS min_biology,
AVG(biology) AS avg_biology
FROM student_score
GROUP BY class;
```
该代码会将每个班级内的不同课程的最高分、最低分、平均分查询出来,并按照班级进行分组展示。如果需要查询所有班级的成绩统计信息,可以去掉`GROUP BY class`语句。
mysql 行转列 成绩汇总,查询每个学生每门课程的成绩,sql server行转列实现
在 MySQL 中,可以使用 GROUP_CONCAT 和 CASE WHEN 语句实现行转列操作,查询每个学生每门课程的成绩汇总,示例 SQL 语句如下:
```
SELECT
s.name AS student_name,
GROUP_CONCAT(
CONCAT(c.name, ':',
CASE WHEN sc.score IS NULL THEN '无成绩' ELSE CAST(sc.score AS CHAR) END)
ORDER BY c.id
SEPARATOR ', '
) AS scores
FROM
student s
JOIN score sc ON s.id = sc.student_id
JOIN course c ON sc.course_id = c.id
GROUP BY
s.id;
```
而在 SQL Server 中,可以使用 PIVOT 和 UNPIVOT 关键字实现行转列操作,示例 SQL 语句如下:
```
SELECT
student_name,
course_name + ': ' + CAST(score AS VARCHAR(10)) AS score
FROM
(SELECT
s.name AS student_name,
c.name AS course_name,
CAST(sc.score AS FLOAT) AS score
FROM
student s
JOIN score sc ON s.id = sc.student_id
JOIN course c ON sc.course_id = c.id) AS source_data
PIVOT
(MAX(score) FOR course_name IN ([语文], [数学], [英语])) AS pivot_data;
```
其中,MAX(score) 可以替换为其他聚合函数,如SUM、AVG等。同时,UNPIVOT 关键字则可以实现列转行操作。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)