SQL新手如何查询每名学生所有课程的考试参与次数
实现每名学生对应每门课程考试参与次数的SQL查询方案
你现有的查询已经完成了所有所需表的关联逻辑,仅需增加分组统计规则即可实现需求,修改后的查询语句如下:
SELECT students.id, students.surname, students.name, courses.name AS "course", COUNT(*) AS exam_attempt_count FROM `students` JOIN exam_student ON exam_student.student_id = students.id JOIN exams ON exam_student.exam_id = exams.id JOIN courses ON exams.course_id = courses.id GROUP BY students.id, students.surname, students.name, courses.id, courses.name ORDER BY students.surname ASC, students.name ASC, courses.name ASC;
逻辑说明:
- 新增的
COUNT(*)会统计每个「学生+对应课程」分组下的记录数,返回结果就是该学生这门课程的考试参与次数,别名exam_attempt_count可以根据你的业务命名习惯自行修改 GROUP BY子句包含了所有SELECT中未被聚合的字段,可避免开启ONLY_FULL_GROUP_BYSQL模式时出现语法报错- 如果你需要展示参与次数为0的记录(如某学生从未参加过某门课的考试也需要显示次数为0),可以将现有内连接(JOIN)改为左连接(LEFT JOIN),同时将
COUNT(*)替换为COUNT(exams.id),即可兼容空值场景统计0次的需求
内容的提问来源于stack exchange,提问作者Gianluca
相关产品推荐
相关产品推荐

