sql - BigQuery:为表中的缺失列填充空值
问题描述
我有一个查询来显示基于某些指标的每日聚合。就像是
select date(timestamp), metric, count(*) from aggs GROUP BY 1,2 ORDER BY 1,2;
问题是有时某天缺少某些指标,例如:
date | metric | count
03/01 | B | 50
03/02 | A | 60
03/02 | B | 10
03/02 | C | 70
03/03 | C | 10
我想为缺少的日期/指标对填写 0 或 null - 即我们如何执行以下操作:
date | metric | count
03/01 | A | 0
03/01 | B | 50
03/01 | C | 0
03/02 | A | 60
03/02 | B | 10
03/02 | C | 70
03/03 | A | 0
03/03 | B | 0
03/03 | C | 10
解决方案
您可以使用 a 生成行cross join
,然后使用 a 填充值left join
:
select date, metric, coalesce(t.count, 0)
from (select distinct date from t) d cross join
(select distinct metric from t) m left join
t
using (date, metric);
如果您没有想要的所有日期,可以使用:
unnest(generate_date_array(<date1>, <date2>, interval 1 day)) u(dte)
推荐阅读
- corda - Corda Class org.hibernate.exception.SQLGrammarException 没有注解或者在白名单上,所以不能在序列化中使用
- image - 如何将所有 **vessels** 对齐到同一方向?
- javascript - Braintree JS SDK + Rails 集成
- php - 使用 PHP 代码在 Wordpress 中显示图片
- sql - Oracle:点的正则表达式
- apache-pig - 猪映射键到一行中的每个值,每一行都有不同的列
- javascript - javascript中的日期函数
- python-3.x - ValueError:使用 GaussianNB 在 scikit-learn (sklearn) 中设置具有序列的数组元素
- c# - SqlCommand 参数 - 必须声明标量变量“@positionX”。
- php - 如何在 Laravel 中将多个中间件放在一条路线上?