sql - 如何确定 BigQuery 中的 GROUPING 值是否为 NULL?
问题描述
BigQuery 支持ROLLUP
,例如:
WITH Sales AS (
SELECT 123 AS sku, 1 AS day, 9.99 AS price UNION ALL
SELECT 123, 1, 8.99 UNION ALL
SELECT 456, 1, 4.56 UNION ALL
SELECT 123, NULL, 9.99 UNION ALL
SELECT 789, 3, 1.00 UNION ALL
SELECT 456, 3, 4.25 UNION ALL
SELECT 789, 3, 0.99
)
SELECT
sku,
day,
SUM(price) AS total
FROM Sales
GROUP BY ROLLUP(sku, day)
ORDER BY sku, day;
我们得到:
我的问题是是否有办法做GROUPING
或GROUPING_ID
在 BigQuery 中?是的,我知道解决方法是“在查询之前清理空值”,但假设有很多列,我不知道哪些列有空值,是否有 UDF 或其他方式来完成这个GROUPING()
概念在 BQ 聚合中?
解决方案
您的问题可能没有现成的解决方案,但这是我尝试在一次扫描中进行多个聚合时使用的方法。请注意,当我不关心量化空值或已经估算空值时,我会使用它。
select concat(if(sku is null,'','(sku)'),
if(day is null,'','(day)'),
if(coalesce(sku,day) is not null,'','(overall)')) as agg_level,
sku,
day,
sum(price) as total
from sales
group by rollup(sku, day)
order by sku,day;
推荐阅读
- delphi - Delphi 10.3(32 位)社区版访问 PostgreSQL 11,使用 FireDac 驱动程序的 64 位版
- android - 运行我的 Flutter 项目时,我的 Flutter 项目中出现 AndroidX 不兼容问题
- react-native - 与 Expo 项目在 React 中广播
- python - 如何使用 python 2.7 完成基本身份验证?
- php - Yii2,为什么当该属性由行为分配时,由于缺少强制属性而导致模型验证失败?
- c# - 实体框架在加载时抛出异常
- javascript - 如何通过 Gmail API 和 Google Apps 脚本请求和发送付款
- java - 从 Spring Boot 开始持续使用 REST Web 服务
- typescript - TypeScript类型检查问题,一个字符串被压入一个数字数组
- python - python selenium find_element_by_link_text,元素存在但未找到