Привет! Третий день сижу ломаю голову, не пойму в чем подвох.
Есть три таблицы:
salons_groups_link
users_groups_link
salons_groups
В первой просто связка сетей / филиалов вида salon_id | group_id
Во второй пользователи сети в формате user_id | group_id
важно - один юзер может быть во многих group_id
В третьей - просто список всех сетей
Мне нужно получить ид сети, название сети, сколько филиалов входит в эту сеть, сколько пользователей входит в эту сеть
Казалось бы, в чем тут проблема? Количество филиалов из сети я получаю как count(sl.salon_id) ... group by sl.group_id
но как только я добавляю в выборку таблицу с пользователями, записей становится больше, и весь мой count едет.
select sg.id, count(sl.salon_id) as "Количество филиалов"
from salons_groups sg
inner join salons_groups_link sl on sg.id = sl.group_id
where sg.id in (
select group_id from salons_groups_link where salon_id = 4564)
group by sl.group_id
дает мне все что я бы хотел
, но как только я добавляю таблицу с пользователями, все ломается:
select sg.id, count(sl.salon_id) as "Количество филиалов", count(u.user_id)
from salons_groups sg
inner join users_groups_link u on u.group_id = sg.id
inner join salons_groups_link sl on sg.id = sl.group_id
where sg.id in (
select group_id from salons_groups_link where salon_id = 4564)
group by sl.group_id
Я пошел другим путем, сначала найдя всех пользователей сети, а потом к этой же выборке цеплять другие таблицы. Пришел к тому же самому. Понимаю, что где-то фундаментально я не прав, а где не пойму