Получите количество пользователей, которые принадлежат группе и количество заказов, которые принадлежат группе через ее пользователей - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть таблица user_groups, таблица users и таблица orders.

Соотношение между ними таково: users.group_id, orders.user_id.

Я пытаюсь получить количество пользователей, принадлежащих к каждой группе, и количество заказов, принадлежащих каждой группе через ее пользователей.

Мой код:

select user_groups.*, count(users.id) as user_count, count(orders.id) as order_count

from user_groups

left join users on user_groups.id=users.group_id
left join orders on users.id=orders.user_id

group by user_groups.id

Ожидаемый результат:

id | user_count | order_count
1  | 5          | 67
2  | 1          | 1

Фактический результат:

enter image description here

Количество заказов должно быть 5, а не 71:

enter image description here

1 Ответ

0 голосов
/ 21 ноября 2018

Использование count(distinct):

select ug.*, count(distinct u.id) as user_count, count(distinct o.id) as order_count    
from user_groups ug left join
     users u
     on ug.id = u.group_id left join
     orders o
     on u.id = o.user_id
group by ug.id;

count(id) подсчитывает количество не NULL значений.Очевидно, вы хотите посчитать количество различных значений, что и делает distinct.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...