https://leetcode.com/problems/students-and-examinations/description/ Easy

Условие

Даны три таблицы:

Table: Students

Column Name Type
student_id int
student_name varchar

student_id — первичный ключ.

Каждая строка содержит ID и имя студента.

Table: Subjects

Column Name Type
subject_name varchar

subject_name — первичный ключ.

Каждая строка содержит название одного предмета.

Table: Examinations

Column Name Type
student_id int
subject_name varchar

У этой таблицы нет первичного ключа. Каждая строка означает, что студент с данным student_id сдавал экзамен по предмету subject_name.

Напишите SQL-запрос, который для каждого студента и каждого предмета вычисляет число посещённых экзаменов. Упорядочить результат по student_id и subject_name.

Решение

SELECT
  s.student_id,
  s.student_name,
  sub.subject_name,
  COUNT(e.student_id) AS attended_exams
FROM Students AS s
CROSS JOIN Subjects AS sub
LEFT JOIN Examinations AS e
  ON s.student_id = e.student_id
  AND sub.subject_name = e.subject_name
GROUP BY
  s.student_id,
  s.student_name,
  sub.subject_name
ORDER BY
  s.student_id,
  sub.subject_name;