MySQL сложный запрос выбора - PullRequest
0 голосов
/ 22 марта 2011

У меня есть 4 таблицы:

user,
administrative_division,
assignment,
user_has_assignment

Между пользователем и administrator_division существует отношение многие-к-одному, где многие - пользователь, а одна - административная_разделение.Между пользователем и назначением существует связь «многие ко многим» через таблицу user_has_assignment.

Я могу узнать, сколько пользователей в каждом административном подразделении, используя эту команду:

select division_id, count(*) from user group by division_id;

Что, например, дает мне что-то вроде этого:

division_id count(*)
  1           4
  2           10

и т. д.

Я могу узнать, сколько назначений принадлежит каждому пользователю, используя эту команду:

select user_id, count(*) from user_has_assignment group by user_id;

, которая дает аналогичный результат

user_id count(*)
   1       2
   2       10

Но я неНе знаю, как можно получить в одном запросе такой результат:

division_id  user_count assignment_count
     1           10            20 
     2            2            4

, где user_count - это общее количество пользователей в каждом административном-административном подразделении, а назначение-общее количество - это общее количество всех назначений, принадлежащих пользователям из одного конкретного административного подразделения.

1 Ответ

3 голосов
/ 22 марта 2011

вам просто нужно присоединиться к таблицам выше и сгруппировать результаты по devision_id, так что вы получите одну строку для каждого подразделения следующим образом:

SELECT ad.devision_id,
       COUNT(DISTINCT u.user_id) AS user_count,
       COUNT(DISTINCT a.assignment_id) AS assignment_count
FROM user u
     JOIN administrative_division ad ON u.devision_id = ad.devision_id
     LEFT JOIN user_has_assignment ucon ON u.user_id = ucon.user_id
     LEFT JOIN assignment a ON a.assignment_id = ucon.assignment_id

проверьте имена полей в запросе и замените их соответствующим образом, чтобы запрос работал в вашей схеме.

...