Сумма номеров из нескольких таблиц - PullRequest
2 голосов
/ 01 апреля 2019

Я работаю над сайд-проектом, чтобы продвинуться в PL / SQL. Проект, над которым я сейчас работаю, включает в себя статистику из онлайн-видеоигры - Madden 19. Я пытаюсь суммировать / агрегировать всю статистику в одном виде / таблице. Например, я хочу получить сумму всех характеристик за откат в течение сезона. Вся моя статистика разделена на 17 таблиц - по одной таблице на каждую неделю сезона, но игроки отображаются в таблицах только в том случае, если у них была статистика на этой неделе. Таким образом, если они находятся на скамейке или получают травмы на 1-й неделе и не могут играть на 2-й неделе, они не будут включены в данные для 2-й недели.

Статистика Неделя 1:

 Name    | rushyds
-------------------
 Coleman | 25
 Henry   | 15

Статистика недели 2:

 Name    | rushyds
-------------------
 Coleman | 25

Я могу написать запрос на выборку, который может получить и суммировать статистические данные за 1-ю и 2-ю недели. Моя проблема в том, что, например, бег назад получает травму в конце первой недели и накапливает статистику за неделю 1, но не может быть воспроизведен на неделе 2, запрос пропустит статистику с недели 1, потому что он не отображается на неделе 2. Я считаю, что это проблема с объединением, так как я все еще изучаю эту часть PL / SQL и именно поэтому я здесь. Вот мой запрос как есть -

select t.fullname,
sum(t.rushyds + t1.rushyds) as rushyds
from rstats_1 t,
rstats_2 t1
where t.rosterid = t1.rosterid
group by t.fullname

Результат запроса:

 Name    | rushyds
-------------------
 Coleman | 50

Требуется результат:

 Name    | rushyds
-------------------
 Coleman | 50
 Henry   | 15

Приносим извинения, если об этом уже спрашивали, но, как бы я ни произносил свою строку в google, он не дает правильного ответа на этот вопрос, поскольку я, вероятно, не знаю, как конкретно задать этот вопрос. Заранее благодарю за помощь.

редактировать: я думаю, что нашел что-то на основе случаев. Я постараюсь это обновить, если это работает

Обновление: случай не работает, но я думаю, что я выяснил проблему, используя полное внешнее соединение. Мне нужно будет использовать главный лист, содержащий все имена в реестре, чтобы группа использовала эти имена вместо имен, которые существуют только на неделе 1. Я обновлю свой лист с окончательным запросом, как только я закончу, чтобы другие можно увидеть, что решение было.

обновление 2: я понял, что делать, это включает в себя полное внешнее соединение и nvl. это правильный запрос следующим образом:

select r.fullname,
sum(nvl(t.rushyds,0) + nvl(t1.rushyds,0) as rushyds
from rosters r
full outer join rstats_1 t on r.rosterid = t.rosterid
full outer join rstats_2 t1 on r.rosterid = t1.rosterid
group by r.fullname

При полном внешнем объединении имя захватывается независимо от того, отображается оно в таблице или нет, путем объединения уникального идентификатора таблицы - rosterId. Инструкция nvl обрабатывает значения Null, которые могут возникнуть в результате этого, поскольку значение NULL будет перезаписывать заполненные числа, оставляя значение суммы равным нулю. Используя NVL (столбец, число), он заявляет: если в этом столбце будет указано нулевое значение, PL / SQL вместо этого заполнит это значение числом.

...