使用SQL将表A中的空值替换为表B中的值

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (36)

我有这样一张桌子:

price_families (Table A):
ID     UPC      
1      123
1      456
2      789
2      111
1      121

第二个表:

sales_volume (Table B): 
UPC    sales    volume  
123    13.99      2.99
456    null       null 
121    14.99      1.99
789    31.88     22.99
111    null       null 
121    null       null 

我想要的是将表B中的空值替换为同一产品系列的不同UPC的销售/交易量值(使用表A确定价格系列,加入UPC)和按销售额排序,交易量desc(为每个价格家庭)。

这样做的最佳方法是什么?我可以在这里使用coalesce(),或者也可以使用case语句?

我的输出应该是这样的:

output (Table C): 
UPC    sales    volume  
123    13.99      2.99
456    13.99      2.99 
121    14.99      1.99
789    31.88     22.99
111    31.88     22.99 
121    13.99      2.99 
提问于
用户回答回答于

一种方法使用元组进行赋值:

update b
    set (sales, volume) = (select b2.sales, b2.volume
                           from b b2 join
                                a
                                on b2.upc = a.upc
                           where b2.sales is not null and b2.volume is not null
                           order by b2.sales desc, b2.volume desc
                           limit 1
                          )
    where sales is null and volume is null;

编辑:

如果您只是想要select查询:

select b.upc,
       coalesce(b.sales, b2.sales) as sales,
       coalesce(b.volume, b2.volume) as volume
from b left join lateral
     (select b2.sales, b2.volume
      from b b2 join
           a
           on b2.upc = a.upc
      where b2.sales is not null and b2.volume is not null
      order by b2.sales desc, b2.volume desc
      limit 1
     ) b2
     on 1=1;

扫码关注云+社区

领取腾讯云代金券