【发布时间】:2018-07-12 05:40:28
【问题描述】:
我想在标准 SQL 中对以下数据进行透视和计数(使用带有 Big Query 的 Google Add-On OWOX BI):
使其在标准sql中输出如下:
所以我想根据“原因”来选择 itemsku 和 pivot 。
想不通,谢谢!!!
【问题讨论】:
标签: sql google-bigquery bigquery-standard-sql
我想在标准 SQL 中对以下数据进行透视和计数(使用带有 Big Query 的 Google Add-On OWOX BI):
使其在标准sql中输出如下:
所以我想根据“原因”来选择 itemsku 和 pivot 。
想不通,谢谢!!!
【问题讨论】:
标签: sql google-bigquery bigquery-standard-sql
以下是 BigQuery 标准 SQL
#standardSQL
SELECT itemsku,
COUNTIF(reason = 'BIG') AS big,
COUNTIF(reason = 'NONE') AS none,
COUNTIF(reason = 'SMALL') AS small
FROM `project.dataset.table`
GROUP BY itemsku
您可以使用您问题中的虚拟数据进行测试,如下所示
#standardSQL
WITH `project.dataset.table` AS (
SELECT 1010101 itemsku, 'BIG' reason UNION ALL
SELECT 1010101, 'BIG' UNION ALL
SELECT 13333, 'NONE' UNION ALL
SELECT 13333, 'NONE' UNION ALL
SELECT 14444, 'NONE' UNION ALL
SELECT 14444, 'NONE' UNION ALL
SELECT 14444, 'SMALL'
)
SELECT itemsku,
COUNTIF(reason = 'BIG') AS big,
COUNTIF(reason = 'NONE') AS none,
COUNTIF(reason = 'SMALL') AS small
FROM `project.dataset.table`
GROUP BY itemsku
-- ORDER BY itemsku
结果为
Row itemsku big none small
1 13333 0 2 0
2 14444 0 2 1
3 1010101 2 0 0
【讨论】:
您可以使用条件聚合:
select itemsku,
sum(case when reason = 'BIG' then 1 end) as big,
sum(case when reason = 'SMALL' then 1 end) as small,
sum(case when reason = 'NONE' then 1 end) as none
from t
group by itemsku;
如果您想要0s 而不是NULLs,则将else 0 添加到case 表达式中。
【讨论】: