我正在使用Google Big Query,并且我正在尝试从公共示例数据集中获取透视结果 .
对现有表的简单查询是:
SELECT *
FROM publicdata:samples.shakespeare
LIMIT 10;
此查询返回以下结果集 .
现在我要做的是,从表中获得结果,如果单词是勇敢的,选择“BRAVE”作为column_1,如果单词出席,选择“ATTENDED”作为column_2,并汇总单词数量对于这2 .
这是我正在使用的查询 .
SELECT
(CASE WHEN word = 'brave' THEN 'BRAVE' ELSE '' END) AS column_1,
(CASE WHEN word = 'attended' THEN 'ATTENDED' ELSE '' END) AS column_2,
SUM (word_count)
FROM publicdata:samples.shakespeare
WHERE (word = 'brave' OR word = 'attended')
GROUP BY column_1, column_2
LIMIT 10;
但是,此查询返回数据
我在寻找的是
我知道这个数据集的这个数据集没有意义 . 但我只是以此为例来解释这个问题 . 如果你可以为我提供一些指示,那将是很棒的 .
编辑:我也提到How to simulate a pivot table with BigQuery?,它似乎也有我在这里提到的相同问题 .
4 回答
Update 2019:
由于这是一个很受欢迎的问题,让我更新到#standardSQL以及更一般的旋转案例 . 在这种情况下,我们有多行,每个传感器查看不同类型的属性 . 为了转动它,我们会做类似的事情:
作为
AVG()
的替代品,您可以尝试MAX()
,ANY_VALUE()
等 .Previously :
我不确定你要做什么,但是:
更新:结果相同,查询更简单:
同样受How to simulate a pivot table with BigQuery?启发,使用subselect的以下请求会产生您想要的结果:
诀窍是
MAX(NULL, 'ATTENDED', NULL, ...)
等于'ATTENDED'
.使用case / if语句创建透视列是一种方法 . 但如果旋转列的数量开始增长,则会非常烦人 . 为了解决这个问题,我使用python pandas创建了一个Python模块,它自动生成SQL查询,然后可以在BigQuery中运行 . 以下是对它的一个小介绍:
https://yashuseth.blog/2018/06/06/how-to-pivot-large-tables-in-bigquery
如果github出现故障,相关的github代码:
试试这个