SQL - получить количество строк таблицы из нескольких соединений

0

В этой базе данных имеется 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;

Можно ли подсчитать количество преподавателей, используя такие объединения?

Теги:

2 ответа

0
Лучший ответ

Пожалуйста, используйте ниже запрос:

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
  • 0
    Большое спасибо! Оно работает. Это то, что отличается в подсчете, который, кажется, имеет значение.
0
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;
  • 0
    Спасибо за это, но количество покажет количество tutor_locations, а не количество репетиторов.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню