В этой базе данных имеется 4 соответствующих таблицы. (Также показаны соответствующие поля)
репетиторы: id, name
tutor_locations: id, tutor_id, location_id
местоположения: id, name, region_id
регионов: id, name
Моя цель состоит в том, чтобы иметь список регионов с подсчетом количества преподавателей в каждом регионе.
Из-за конструкции базы данных существует промежуточная таблица tutor_locations, где строки представляют собой репетитора, находящегося в определенном месте. Регион может иметь много мест, но мне нужно только, чтобы наставник учитывал этот регион, а не количество преподавателей на каждое место.
Изображение желаемого результата: список регионов с подсчету репетитора
Я могу получить количество строк tutor_locations для каждого региона, но мне трудно получить количество фактических преподавателей в каждом регионе.
Мой запрос:
SELECT regions.name as region, COUNT(*) as tutor_count
FROM regions
LEFT JOIN locations ON locations.region_id = regions.id
LEFT JOIN tutor_locations ON locations.id = tutorlocations.location_id
LEFT JOIN tutors ON tutors.id = tutor_locations.tutor_id
GROUP BY region;
Можно ли подсчитать количество преподавателей, используя такие объединения?
Пожалуйста, используйте ниже запрос:
SELECT r.id AS region_id, r.name as region_name, COUNT(distinct t.id) as tutor_count
FROM regions r
INNER JOIN locations l ON l.region_id = r.id
INNER JOIN tutor_locations tl ON l.id = tl.location_id
INNER JOIN tutors t ON t.id = tl.tutor_id
GROUP BY r.id, r.name
SELECT locations.region_id, regions.name as region, COUNT(*) as tutor_count
FROM regions
LEFT JOIN locations ON locations.region_id = regions.id
LEFT JOIN tutor_locations ON locations.id = tutorlocations.location_id
LEFT JOIN tutors ON tutors.id = tutor_locations.tutor_id
GROUP BY region, locations.region_id;