我正在做一个辅助项目,以便进一步了解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中输入我的字符串,都无法为这个问题提供正确的答案,因为我可能不知道如何具体问这个问题。谢谢您的提前帮助。
edit:我想我根据案例发现了一些东西。我会尝试一下,然后更新它
更新:案例不起作用,但我认为我使用完全外部联接解决了该问题。我将不得不使用包含花名册上所有名称的“母版”表,以便分组使用这些名称,而不是仅在第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值将覆盖填充的数字,而总和的值等于null。通过使用NVL(column,number),它指出,如果此列显示空值,则PL / SQL将改为用“ number”填充该值。