如何使用 MYSQL 在最终表中包含所有列的默认值为 0 的缺失行?
Posted
技术标签:
【中文标题】如何使用 MYSQL 在最终表中包含所有列的默认值为 0 的缺失行?【英文标题】:How to use MYSQL to include missing rows in final table with default 0 values for all columns? 【发布时间】:2020-08-18 18:31:27 【问题描述】:这个问题是我的一个更大的 mysql 查询的一部分。所以我有一张'playerIds'、'dates'、'scores'和'problems'的表格。它是附件图像中的表 T0。我正在对其运行 SQL 查询,以获取“日期”
现在我想要做的是在结果表中包含那些“分数”和“问题”值为 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
【问题讨论】:
【参考方案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
子查询替换为该表即可。
【讨论】:
这正是我想要的。非常感谢你!!!!!!! :D以上是关于如何使用 MYSQL 在最终表中包含所有列的默认值为 0 的缺失行?的主要内容,如果未能解决你的问题,请参考以下文章