У меня есть четыре таблицы:
students
classes
teachers
teacher_assignments
classes
и teachers
имеет отношение многие ко многим, поэтому teacher_assignments
действует как таблица xref
(с полями teacher_id
и class_id
).
У каждого учащегося в students
есть class_id
(много к одному - много учеников в одном классе).
Я должен такжеотметим, что teacher_assignments
имеет столбец active
(BOOL), который указывает, активно ли это назначение
Что я хочу сделать:
Я хочу получитьследующее:
class_name
- конкат его уровня и подуровня, например, 3
и A
teacher_names
- имена учителей в настоящее времяназначенный этому классу student_count
- количество учеников в каждом классе
Сначала я попытался получить только class_name
и teacher_names
, вот так:
SELECT
CONCAT(CONVERT(classes.level, CHAR(8)), classes.sub_level) AS class_name,
GROUP_CONCAT(DISTINCT teachers.name SEPARATOR ',') AS teacher_names
FROM
teacher_assignments
LEFT JOIN teachers
ON teachers.id = teacher_assignments.teacher_id
AND teacher_assignments.active = TRUE
LEFT JOIN classes
ON classes.id = teacher_assignments.class_id
GROUP BY classes.id
Работает нормально и выводит:
class_name | teacher_names
--------------------------------------
1A | NULL
2A | John, Sam
3B | Sam, Sarah
(в классе 1A
в настоящее время нет учителей, поэтому ожидается NULL)
... НО , теперь я понятия не имею, какork student_count
в это.
Мой вопрос:
Как именно таблица students
должна быть соединена с другими в приведенном выше запросе, чтобы я мог получить student_count
колонка?