如何解决如何使用MYSQL在最终表中包括缺失的行,所有列的默认值为0?
这个问题是我拥有的更大的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
子查询。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。