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;

解释:

  1. SELECT semester, course_name, AVG(score) AS avg_score:选择学期、课程名称和平均分数,并将平均分数别名为 avg_score
  2. FROM student_course:从 student_course 表中获取数据。
  3. GROUP BY semester, course_name:按照学期和课程名称进行分组。
  4. HAVING avg_score >= 80:筛选平均分数大于等于 80 分的记录。
  5. ORDER BY semester, course_name:按照学期和课程名称进行排序。

这道题考察了 SQL 中的多个重要概念,包括:

  • 分组查询 (GROUP BY):将数据按照指定的字段进行分组。
  • 聚合函数 (AVG):计算分组数据的平均值。
  • 过滤条件 (HAVING):筛选符合条件的分组数据。
  • 排序 (ORDER BY):按照指定的字段对结果进行排序。

希望这篇文章能够帮助你更好地理解 SQL 分组查询的应用。

SQL 分组查询难题:统计每个学期每个课程的平均分 (大于等于 80 分)

原文地址: https://www.cveoy.top/t/topic/jycD 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录