Использование 2 "Группировать по" в одном SQL-запросе

74
9

У меня есть 3 таблицы, которые выглядят так:

Местоположения: id, name

События: id, name, locationid

Участники: id, name, eventid

Мне нужен запрос, который возвращает все местоположения, количество связанных с ним событий и количество участников (косвенно), связанных с местоположением.

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

SELECT a.id,a.name,count(b.id),count(c.id) FROM Locations a
LEFT JOIN Events b ON a.id=b.locationid
LEFT JOIN Participants c ON b.id=c.eventid
GROUP BY b.locationid,c.eventid

спросил(а) 2017-09-18T01:49:00+03:00 2 года, 6 месяцев назад
1
Решение
61

Один из методов - использовать count(distinct) вместо count().

SELECT l.id, l.name, count(distinct e.id), count(distinct p.id)
FROM Locations l LEFT JOIN
Events e
ON l.id = e.locationid LEFT JOIN
Participants p
ON e.id = p.eventid
GROUP BY l.id, l.name;

ответил(а) 2017-09-18T02:01:00+03:00 2 года, 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема