Как получить выборку с группировкой и кол-вом общих записей
Есть таблица:
+-----+-------+
| id | team |
+-----+-------+
| 1 | 1 |
| 2 | 2 |
| 3 | 2 |
| 4 | 3 |
+-----+-------+
Мне нужно получить из этой таблицы всех пользователей и посчитать сколько в их команде пользователей всего.
SELECT id, count(team), team FROM user_team GROUP BY id
Как и положено возвращает что у одного пользователя одна команда.
Ответы (3 шт):
Автор решения: splash58
→ Ссылка
группировать надо по team, ф потом подзапрос объединять с основным по номеру команды
select id, cnt
from user_team
join
(SELECT team, count(id) cnt
FROM user_team
GROUP BY team
) t using(team)
Автор решения: Shevtsov Eugene
→ Ссылка
Не знаю правильно сделал или нет, но ничего умнее не придумал кроме как это:
SELECT id, team, COUNT(DISTINCT ut2.user) FROM user_team ut
LEFT JOIN user_team ut2 ON ut.team = ut2.team
GROUP BY id
Автор решения: Akina
→ Ссылка
SELECT *, COUNT(*) OVER (PARTITION BY team) users_in_team
FROM user_team;
