是否有办法仅对某些GROUP BY
列而不是所有GROUP BY
列进行汇总汇总?我试图实现SELECT a,b,SUM(c) FROM sample.data GROUP BY a,b
,而不是SELECT a,b,SUM(c) FROM sample.data GROUP BY ROLLUP(a,b)
或SELECT a,b,SUM(c) FROM sample.data GROUP BY a, ROLLUP(b)
。这在BigQuery中可行吗?
我现在想象的唯一方法就是为每个我不想汇总的列创建GROUPING
列,并将这些列过滤为0
。但是,在尝试此操作时,我会收到错误Errors encountered during job execution. Resources exceeded during query execution.
,而不包括ROLLUP()
时我得到的错误。 (即使GROUP EACH BY
也出现相同的错误。)
思想?
答案 0 :(得分:2)
我不认为GROUP BY a, ROLLUP(b)
之类的sysntax可用!不是!
就像你的案例的解决方法一样,我建议在下面模仿这样的语法
所以,假设你有sample.data
表a, b, c, d
,你需要模仿
SELECT a, b, c, SUM(d) as s
FROM table
GROUP BY a, b, ROLLUP(c)
下面是ROLLUP-less “version”:
SELECT a, b, c, s
FROM (
SELECT a, b, c, SUM(d) AS s
FROM sample.data
GROUP BY a, b, c
), (
SELECT a, b, NULL AS c, SUM(s) AS s
FROM (
SELECT a, b, c, SUM(d) AS s
FROM sample.data
GROUP BY a, b, c
)
GROUP BY 1, 2, 3
)
ORDER BY a, b, c
答案 1 :(得分:1)
MS SQL支持组如下:
GROUP BY a, ROLLUP(b, c)
GROUP BY ROLLUP(a, b), ROLLUP(c, d)
参见文章https://technet.microsoft.com/en-us/library/bb522495(v=sql.105).aspx
谷歌BQ仍然不支持。
您可以使用 HAVING 子句,如下所示:
SELECT a,b,SUM(c) FROM sample.data GROUP BY ROLLUP(a,b)
HAVING a is not null
OR
SELECT a,b,SUM(c) FROM sample.data GROUP BY ROLLUP(a,b)
HAVING GROUPING(a)=0
此解决方案无法解决错误:查询执行期间超出资源的问题。
我想,对汇总,多维数据集和分组集的完全支持是未来BQ版本的一个很好的功能。
答案 2 :(得分:1)
RollUp在Legacy SQL(https://cloud.google.com/bigquery/docs/reference/legacy-sql#groupby)中提供Bigquery,如果您还需要使用标准SQL中的某些功能,那就不是很好。