snowflake-cloud-data-platform - 如何为不存在的记录分配 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 | 彼得 |
解决方案
您将需要 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
;
推荐阅读
- c# - C# - EPPlus 库,使用响应创建 Excel
- javascript - Vue: default value for prop function
- unity3d - Gradle构建在unity2018中失败
- angular - 尝试从父组件中的 mat-dialog 角度接收文件
- python - 如何在 Y 轴的不同高度上绘制列表列表?
- angular - Angular 7 Firebase 电子邮件登录身份验证不起作用
- python-3.x - 将来自 HIVE 和 Hbase 的数据公开为 REST API - Hadoop Datalake - Python Pyspark
- javascript - 为什么这个 vue 组件在 Laravel 中不起作用
- c++ - 我的结构是一个单词列表,之后必须输出。但是输出格式不对
- html - 添加四个带有迷你边框线的块