如何使用 MYSQL 在最终 table 中包含缺失的行,所有列的默认值为 0?
How to use MYSQL to include missing rows in final table with default 0 values for all columns?
这个问题是我有一个更大的 mySQL 查询的一部分。所以我有 'playerIds'、'dates'、'scores' 和 'problems' 的 table。附图中的 Table T0。我是 运行 一个 SQL 查询,以获取 'date' <= (2020-08-14 - 7days) 的所有玩家的最新行。并非所有玩家都会有满足该条件的日期行,因此这些 playerId 行自然不会出现在结果 table 中(图片中的 Table T1)。
现在我想要做的是在结果 table 中包含 'score' 和 'problems' 值为 0 的缺失行(参见 Table T2图片)。我完全不知道如何去做,因为我对 SQL 查询很陌生。
这是从 T0 生成 Table T1 的 SQL 查询的一部分,但我想对其进行修改,使其从 T0 生成 Table 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
如果您有所有玩家的参考 table,您只需将 select distinct
子查询替换为 table。
这个问题是我有一个更大的 mySQL 查询的一部分。所以我有 'playerIds'、'dates'、'scores' 和 'problems' 的 table。附图中的 Table T0。我是 运行 一个 SQL 查询,以获取 'date' <= (2020-08-14 - 7days) 的所有玩家的最新行。并非所有玩家都会有满足该条件的日期行,因此这些 playerId 行自然不会出现在结果 table 中(图片中的 Table T1)。
现在我想要做的是在结果 table 中包含 'score' 和 'problems' 值为 0 的缺失行(参见 Table T2图片)。我完全不知道如何去做,因为我对 SQL 查询很陌生。
这是从 T0 生成 Table T1 的 SQL 查询的一部分,但我想对其进行修改,使其从 T0 生成 Table 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
如果您有所有玩家的参考 table,您只需将 select distinct
子查询替换为 table。