如何使用 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 的缺失行?的主要内容,如果未能解决你的问题,请参考以下文章

显示 MySQL 中包含相同值的所有行

如何在最终应用中包含所有内容

SQL如何查找和删除MYSQL数据库中包含特定字符串的记录

PHP计算在许多列中包含相同值的MYSQL行

如何在 MySQL 语句中包含 PHP 变量

如何在 MySQL 语句中包含 PHP 变量