BigQuery 中的新 PIVOT 函数
The new PIVOT function in BigQuery
今天 BigQuery 发布了一个很酷的新函数,名为 PIVOT。
下面是它的工作原理:
with Produce AS (
SELECT 'Kale' as product, 51 as sales, 'Q1' as quarter UNION ALL
SELECT 'Kale', 23, 'Q2' UNION ALL
SELECT 'Kale', 45, 'Q3' UNION ALL
SELECT 'Kale', 3, 'Q4' UNION ALL
SELECT 'Apple', 77, 'Q1' UNION ALL
SELECT 'Apple', 0, 'Q2' UNION ALL
SELECT 'Apple', 25, 'Q3' UNION ALL
SELECT 'Apple', 2, 'Q4')
SELECT * FROM
(SELECT * FROM Produce)
PIVOT(SUM(sales) FOR quarter IN ('Q1', 'Q2', 'Q3', 'Q4'))
+---------+----+----+----+----+
| product | Q1 | Q2 | Q3 | Q4 |
+---------+----+----+----+----+
| Apple | 77 | 0 | 25 | 2 |
| Kale | 51 | 23 | 45 | 3 |
+---------+----+----+----+----+
我的问题是,在现实世界中,我们事先并不知道季度值。
我试图通过以下方式更动态地做到这一点:
SELECT * FROM
(SELECT * FROM Produce)
PIVOT(SUM(sales) FOR quarter in (select distinct quarter from Produce))
没有成功。关于如何处理的任何线索?
这是一个 link 到 reddit 的交叉post
在下面使用 - 它动态构建数据透视列
execute immediate (
select '''select * from (select * from `project.dataset.Produce`)
pivot(sum(sales) for quarter in ("''' || string_agg(quarter, '", "') || '''"))
'''
from (select distinct quarter from `project.dataset.Produce` order by quarter)
);
今天 BigQuery 发布了一个很酷的新函数,名为 PIVOT。
下面是它的工作原理:
with Produce AS (
SELECT 'Kale' as product, 51 as sales, 'Q1' as quarter UNION ALL
SELECT 'Kale', 23, 'Q2' UNION ALL
SELECT 'Kale', 45, 'Q3' UNION ALL
SELECT 'Kale', 3, 'Q4' UNION ALL
SELECT 'Apple', 77, 'Q1' UNION ALL
SELECT 'Apple', 0, 'Q2' UNION ALL
SELECT 'Apple', 25, 'Q3' UNION ALL
SELECT 'Apple', 2, 'Q4')
SELECT * FROM
(SELECT * FROM Produce)
PIVOT(SUM(sales) FOR quarter IN ('Q1', 'Q2', 'Q3', 'Q4'))
+---------+----+----+----+----+
| product | Q1 | Q2 | Q3 | Q4 |
+---------+----+----+----+----+
| Apple | 77 | 0 | 25 | 2 |
| Kale | 51 | 23 | 45 | 3 |
+---------+----+----+----+----+
我的问题是,在现实世界中,我们事先并不知道季度值。
我试图通过以下方式更动态地做到这一点:
SELECT * FROM
(SELECT * FROM Produce)
PIVOT(SUM(sales) FOR quarter in (select distinct quarter from Produce))
没有成功。关于如何处理的任何线索?
这是一个 link 到 reddit 的交叉post
在下面使用 - 它动态构建数据透视列
execute immediate (
select '''select * from (select * from `project.dataset.Produce`)
pivot(sum(sales) for quarter in ("''' || string_agg(quarter, '", "') || '''"))
'''
from (select distinct quarter from `project.dataset.Produce` order by quarter)
);