【发布时间】:2018-11-16 19:44:56
【问题描述】:
我对 SQL 有点陌生,所以请温柔...
我正在尝试创建一个 [legacy] BigQuery SQL 自联合,例如:
SELECT * FROM (query 1), (query 1)
从另一个 SO 答案 here 中找到的语法。但是查询 1 很长,我不想多次复制/粘贴整个查询。有没有办法命名查询 1,这样我就不必重新粘贴整个内容?
我正在尝试执行以下操作(关于对A 的引用):
SELECT
*
FROM
(query 1) AS A,
(SELECT
Category as Hier_Level,
MAX(Department),
Category,
"VARIOUS" AS Subcategory,
SUM(DOLLARS)
FROM
A
GROUPBY
Category) AS B,
(SELECT
Department as Hier_Level,
Department,
"VARIOUS" AS Category,
"VARIOUS" AS Subcategory,
SUM(DOLLARS)
FROM
A
GROUPBY
Department,
Category) AS C,
...
更新
虽然问题的重点是不重复查询 1 的代码,但聚合的最终目标是获取如下数据,由查询 1 输出:
Hier_Level Department Category Subcategory Dollars
Subcategory Electronics TV LCD 3500
Subcategory Electronics TV OLED 6000
Subcategory Electronics Phone iPhone 600
并返回同一个表,其中添加了用于来自 groupbys 的聚合的行。结果应如下所示:
Hier_Level Department Category Subcategory Dollars
Subcategory Electronics TV LCD 3500
Subcategory Electronics TV OLED 6000
Subcategory Electronics Phone iPhone 600
Category Electronics TV Various 9500
Category Electronics Phone iPhone 600
Department Electronics Various Various 10100
在标准 SQL 中,我的理解是可以使用 CTE 和 union all 来完成类似的操作,但在 BQ Legacy SQL 中都没有。
【问题讨论】:
-
您能否显示确切的查询,或者至少是具有代表性的较小版本?也许它可以用不同的方式重写。旧版 SQL 不支持 CTE,因此消除了一种避免重复查询的好方法。
-
@TimBiegeleisen - 我已经尽可能多地附上了查询 1 的示例 - 这有帮助吗?我知道这有点抽象......
-
@ZaxR - 你应该提供输入数据和预期结果的例子,否则它会在空中拍摄
-
@MikhailBerlyant 不幸的是,我无法分享数据示例。我的最终目标是获取查询 1 并将行添加到该表中,这些行是查询 1 的分组聚合(总和)。各种分组基于一个或多个层次结构级别。这有帮助吗?
-
没有人对您的具体数据真正感兴趣!只需模仿它并提供一些可以重现您的问题的虚拟数据!
标签: sql google-bigquery union