#mysql #group-by #union
#mysql #группировка по #объединение
Вопрос:
(select a.id, b.gamesyouth b.gamesadult as numofgames
from tusplayer a, tusplayerbasic b
where a.id = b.playerid and b.gamesyouth b.gamesadult > 400)
union all
(select a.id, count(*) as numofgames
from tusplayer a, tuslineup b, tusgames c
where a.id = b.playerid and b.fussballdeid = c.fussballdeid and c.kickoff > '2020-10-14'
group by a.id)
order by id
он выбирает количество игр из 2 разных таблиц.
Он возвращает что-то вроде:
id numofgames
187 3
188 623
188 3
189 3
190 700
190 3
Так, например, идентификаторы 188 и 190 содержат 2 записи, 187 и 189 — только одну.
Теперь я хочу иметь полную сумму для обеих таблиц по идентификатору. SQL:
select id, numofgames from ((select a.id, b.gamesyouth b.gamesadult as numofgames
from tusplayer a, tusplayerbasic b
where a.id = b.playerid and b.gamesyouth b.gamesadult > 400)
union all
(select a.id, count(*) as numofgames
from tusplayer a, tuslineup b, tusgames c
where a.id = b.playerid and b.fussballdeid = c.fussballdeid and c.kickoff > '2020-10-14'
group by a.id)
order by id) as rotz
group by rotz.id
Но он возвращает только
id numofgames
187 3
188 623
189 3
190 700
188 должно быть 626, а 190 должно быть 703.
Где ошибка?
Ответ №1:
SELECT id, sum(x)
FROM tableA
GROUP BY id
UNION ALL
SELECT id, sum(x)
FROM tableB
GROUP BY id
Приведет к 2 строкам, потому что это то, что UNION ALL
делает.
Если вам нужен только один итог, вам нужно будет сделать:
SELECT id, sum(x)
FROM (
SELECT id, sum(x) as x
FROM tableA
GROUP BY id
UNION ALL
SELECT id, sum(x)
FROM tableB
GROUP BY id
) y
GROUP BY id
Ответ №2:
Вы пропустили сумму :
select id, sum(numofgames) ...
Использование group by без агрегатной функции (count, sum, mean …) просто выберет одну строку для каждой группы.
Комментарии:
1. О, спасибо, это работает! Но почему я должен это делать в качестве дополнительной суммы ()? Разве group-by не предназначен для подсчета нескольких записей?
2. Использование
group by
без агрегатной функции (count, sum, mean …) просто выберет одну строку для каждой группы. mariadb.com/kb/en/group-by3. Пожалуйста, добавьте некоторые пояснения к вашему ответу , чтобы другие могли извлечь из него уроки