在Hive上左连接 - 如何将NULL计为0?

时间:2017-01-11 16:24:52

标签: sql join hive left-join

假设我有一张桌子销售:

Sale_ID     Sale_date   Sale_amount
93480294    2017-01-01      100.00
12124343    2017-01-02      400.00
19859248    2017-01-01      130.00
65683748    2017-01-01      200.00

表返回

Sale_ID     Return_date  Sale_amount
93480294    2017-01-03      100.00

我正在尝试创建一个总销售表来计算销售额减去返回的sale_amount(如果存在)

类似

select sales.sale_id, sales.sale_amount - returns.sale_amount
from sales_table sales left outer join returns_table returns on sales.sale_id = returns.sale_id

将返回

12124343        NULL
19859248        NULL
65683748        NULL
93480294        0

但我需要它返回

93480294        0
12124343        400
19859248        130
65683748        200

tl; dr - 如何将右列中未显示在左列中的行计为零,以便计算差异?

2 个答案:

答案 0 :(得分:2)

使用coalesce()

select sales.sale_id,
       coalesce(sales.sale_amount, 0) - coalesce(returns.sale_amount, 0)
from sales_table sales left outer join
     returns_table returns
     on sales.sale_id = returns.sale_id;

答案 1 :(得分:0)

试试这个:

select sales.sale_id, sales.sale_amount - isnull(returns.sale_amount, 0)
from sales_table sales 
left outer join returns_table returns on sales.sale_id = returns.sale_id