题目
学生表: Students
科目表: Subjects
考试表:
Examinations
查询出每个学生参加每一门科目测试的次数,结果按 student_id
和 subject_name
排序。
查询结构格式如下所示。
示例 1:
解题思路
1.题目要求我们求出每个学生参加每一门科目测试的次数,这时候我们要将三个表做连接,然后再进行查询。
2.首先我们将Student表和Subject表进行笛卡尔积,然后将得到的结果再与Examinations表做左连接,连接的条件是 student.student_id = e.student_id 、Subject.subject_name = e.subject_name 。这个时候我们就将三个表的信息聚合到了一起。
3.之后我们对表进行分组,先按student_id进行分组后,再按subject_name进行分组,attended_exams只需要统计出分好组的 subject_name 即可。
代码实现
SELECT
s1.student_id,
s1.student_name,
s2.subject_name,
count( e.subject_name ) AS attended_exams
FROM
Students s1
JOIN Subjects s2
left JOIN Examinations e ON s1.student_id = e.student_id
AND s2.subject_name = e.subject_name
GROUP BY
s1.student_id,
s2.subject_name
ORDER BY
s1.student_id
测试结果