【问题标题】:How to use MYSQL to include missing rows in final table with default 0 values for all columns?如何使用 MYSQL 在最终表中包含所有列的默认值为 0 的缺失行?
【发布时间】: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

【问题讨论】:

    标签: mysql sql datetime greatest-n-per-group window-functions


    【解决方案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
    猜你喜欢
    • 2012-05-10
    • 2019-02-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-09
    • 1970-01-01
    • 2022-12-21
    • 1970-01-01
    • 2016-12-28
    相关资源
    最近更新 更多