为数据集中存在的所有不同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值的主要内容,如果未能解决你的问题,请参考以下文章