SQL 分组查询难题:统计每个学期每个课程的平均分 (大于等于 80 分)
SQL 分组查询难题:统计每个学期每个课程的平均分 (大于等于 80 分)
假设有一个学生选课表,包含以下字段:
- 学生编号 (student_id)
- 课程编号 (course_id)
- 课程名称 (course_name)
- 学期 (semester)
- 分数 (score)
现在要求编写一条 SQL 查询语句,统计每个学期每个课程的平均分数,并按照学期和课程名称进行分组排序,只显示平均分数大于等于 80 分的记录。
示例数据:
| student_id | course_id | course_name | semester | score | |------------|-----------|-------------|----------|-------| | 1 | 1 | '数学' | 202001 | 90 | | 1 | 2 | '英语' | 202001 | 85 | | 2 | 1 | '数学' | 202001 | 80 | | 2 | 2 | '英语' | 202001 | 75 | | 1 | 1 | '数学' | 202002 | 95 | | 1 | 2 | '英语' | 202002 | 90 | | 2 | 1 | '数学' | 202002 | 85 | | 2 | 2 | '英语' | 202002 | 80 |
期望的查询结果:
| semester | course_name | avg_score | |----------|-------------|-----------| | 202001 | '数学' | 85 | | 202002 | '数学' | 90 | | 202001 | '英语' | 80 | | 202002 | '英语' | 85 |
查询语句:
SELECT semester, course_name, AVG(score) AS avg_score
FROM student_course
GROUP BY semester, course_name
HAVING avg_score >= 80
ORDER BY semester, course_name;
解释:
SELECT semester, course_name, AVG(score) AS avg_score:选择学期、课程名称和平均分数,并将平均分数别名为avg_score。FROM student_course:从student_course表中获取数据。GROUP BY semester, course_name:按照学期和课程名称进行分组。HAVING avg_score >= 80:筛选平均分数大于等于 80 分的记录。ORDER BY semester, course_name:按照学期和课程名称进行排序。
这道题考察了 SQL 中的多个重要概念,包括:
- 分组查询 (
GROUP BY):将数据按照指定的字段进行分组。 - 聚合函数 (
AVG):计算分组数据的平均值。 - 过滤条件 (
HAVING):筛选符合条件的分组数据。 - 排序 (
ORDER BY):按照指定的字段对结果进行排序。
希望这篇文章能够帮助你更好地理解 SQL 分组查询的应用。
原文地址: https://www.cveoy.top/t/topic/jycD 著作权归作者所有。请勿转载和采集!