【问题标题】:Left join on Hive - how to count NULLs as 0?Hive 上的左连接 - 如何将 NULL 计为 0?
【发布时间】:2017-01-11 16:24:52
【问题描述】:

假设我有一张销售表:

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 - 如何将右列中未出现在左列中的行计数为零,以便计算差异?

【问题讨论】:

    标签: sql join hive left-join


    【解决方案1】:

    使用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;
    

    【讨论】:

      【解决方案2】:

      试试这个:

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-03-03
        • 1970-01-01
        • 1970-01-01
        • 2014-12-26
        • 1970-01-01
        • 2017-02-04
        • 1970-01-01
        相关资源
        最近更新 更多