如何使用MYSQL在最终表中包括缺失的行,所有列的默认值为0?

问题描述

Pic of All Tables

这个问题是我拥有的更大的mySQL查询的一部分。所以我有一个表格“ playerIds”,“日期”,“分数”和“问题”。所附图片为表T0。我正在对其执行SQL查询,以获取'date'为

现在我要做的是在结果表中包括那些缺失的行,这些行的'score'和'problems'值为0(请参见图片中的表T2)。由于我对SQL查询非常陌生,因此我对此一无所知。

这是从T0生成表T1的SQL查询的一部分,但我想对其进行修改,使其从T0生成表T2:

select *
from (
   select *,row_number() over (partition by playerId order by date desc) as ranking
   from player
   where date<=date_add(date('2020-08-14'),interval -7 day)
) t
where t.ranking = 1

解决方法

一个选项使用子查询来列出所有玩家,然后用left join带给您当前的结果集:

select p.playerId,t.date,coalesce(t.score,0) score,coalesce(t.problem,0) problem
from (select distinct playerId from player) p
left join (
   select p.*,row_number() over (partition by playerId order by date desc) as rn
   from player p
   where date <= '2020-08-14' - interval 7 day
) t on t.playerId = p.playerId and t.rn = 1

如果您拥有所有玩家的参照表,则可以用该表替换select distinct子查询。