首页 > 解决方案 > 如何为不存在的记录分配 0 值

问题描述

在雪花中,同时使用

select sum(sale)
from ..
group by date  

不返回星期五,因为不存在 1 月 10 日星期五的记录。

如何在周五 10 日获得缺失数据的显式 0 值?

日期 工作日 销售 文员
2020-01-06 周一 1,500 约翰
2020-01-07 周二 1,300 约翰
2020-01-08 周三 1,400 约翰
2020-01-09 周四 1,600 约翰
2020-01-11 周六 1,700 约翰
2020-01-12 星期日 1,200 约翰
2020-01-06 周一 1,200 彼得
2020-01-07 周二 1,100 彼得
2020-01-08 周三 1,700 彼得
2020-01-09 周四 1,500 彼得
2020-01-11 周六 1,000 彼得
2020-01-12 星期日 1,900 彼得

标签: snowflake-cloud-data-platform

解决方案


您将需要 3 个元素:

  • 所有日期的列表,因此我们可以为每个日期找到一个数字。
  • 右/左连接,因此即使当天没有数据,连接也有效
  • A IFNULL(), 将日期的空值转换为 0。

例如:

with all_dates as (
    select dateadd('day', row_number() over(order by 0) -1, '2020-01-01') generated_day
    from table(generator(rowcount => 6))
), data as (
    select '2020-01-01'::date d, 3 value
    union all select '2020-01-04', 7
)

select generated_day, ifnull(value, 0)
from data a
right join all_dates b
on a.d=b.generated_day
;

在此处输入图像描述

另请参阅https://stackoverflow.com/a/65822976/132438


推荐阅读