Есть 3 таблицы: таблица учеников, таблица предметов и таблица экзаменов.
Students table:
+------------+--------------+
| student_id | student_name |
+------------+--------------+
| 1 | Alice |
| 2 | Bob |
| 13 | John |
| 6 | Alex |
+------------+--------------+
Subjects table:
+--------------+
| subject_name |
+--------------+
| Math |
| Physics |
| Programming |
+--------------+
Examinations table:
+------------+--------------+
| student_id | subject_name |
+------------+--------------+
| 1 | Math |
| 1 | Physics |
| 1 | Programming |
| 2 | Programming |
| 1 | Physics |
| 1 | Math |
| 13 | Math |
| 13 | Programming |
| 13 | Physics |
| 2 | Math |
| 1 | Math |
+------------+--------------+
SQL код указан ниже:
SELECT s.student_id,s.student_name,b.subject_name,COUNT(e.subject_name) as attended_exams
FROM Students as s
INNER JOIN Subjects as b
LEFT JOIN Examinations as e
ON s.student_id=e.student_id AND b.subject_name=e.subject_name
GROUP BY s.student_id,b.subject_name;
Часть, с которой я путаюсь является INNER JOIN
, потому что таблица учеников и таблица предметов не имеют пересечений или общих столбцов. Я предполагаю, что моя цель состоит в том, чтобы интуитивно понять / представить таблицу прямо перед выполнением LEFT JOIN
. А также необходимо ли вообще включать таблицу предметов, поскольку у нас уже есть все предметы в таблице экзаменов? Очень ценю помощь!
На самом деле это проблема из базы данных LeetCode. Ссылка ниже:
https://leetcode.com/problems/students-and-examinations/