为数据集中存在的所有不同column2值填写缺少的column1值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为数据集中存在的所有不同column2值填写缺少的column1值相关的知识,希望对你有一定的参考价值。

表t如下所示:

+-----+------+-------+
| key | week | value |
+-----+------+-------+
|   1 |    1 |    10 |
|   1 |    2 |    20 |
|   2 |    1 |   100 |
|   2 |    2 |   200 |
|   2 |    3 |   300 |
+-----+------+-------+

key 2为value 1,2和3提供week,但key 1只有value用于week 1和2

如何编写查询以添加key 1的行和缺少week 3的缺省value为0,以便结果表如下所示:

+-----+------+-------+
| key | week | value |
+-----+------+-------+
|   1 |    1 |    10 |
|   1 |    2 |    20 |
|   1 |    3 |     0 |
|   2 |    1 |   100 |
|   2 |    2 |   200 |
|   2 |    3 |   300 |
+-----+------+-------+

我尝试了交叉连接和完全外连接(在不同的周列表中),但不知何故无法达到所需的解决方案

答案

使用cross join生成所有行,然后使用left join来生成值:

select k.key, w.week, coalesce(t.value, 0) as value
from (select distinct key from t) k cross join
     (select distinct week from t) w left join
     t
     on t.key = k.key and t.week = w.week
order by k.key, w.week;

这使用原始表作为键和周的来源。如果您有其他包含此信息的表,则可以使用该表。

以上是关于为数据集中存在的所有不同column2值填写缺少的column1值的主要内容,如果未能解决你的问题,请参考以下文章

标准化分类值

将缺失值替换为同一数据集中的非缺失值

无法启用此约束,因为并非所有值都具有相应的父值

如何将 table1.column1 的值设置为 table2.column2 的平均值

MySQL在结果集中添加缺少的月份

SQL Server 2008 R2:查找 column2 值存在于 column1 中的行