Gre*_*all 5 sql google-bigquery
在BigQuery中,我可以使用标准SQL成功运行以下查询:
SELECT
COUNT(*) AS totalCount,
city,
DATE_TRUNC(timeInterval.intervalStart, YEAR) AS start
FROM
sandbox.CountByCity
GROUP BY
city, start
Run Code Online (Sandbox Code Playgroud)
但是当我将start值嵌套在STRUCT中时,它就失败了……
SELECT
COUNT(*) AS totalCount,
city,
STRUCT(
DATE_TRUNC(timeInterval.intervalStart, YEAR) AS start
) as timeSpan
FROM
sandbox.CountByCity
GROUP BY
city, timeSpan.start
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我收到以下错误消息:
无法从[10:11]的SELECT列表别名timeSpan中的GROUP BY字段引用
编写查询以使start值嵌套在STRUCT中的正确方法是什么?
您可以使用进行此操作ANY_VALUE。您获得的struct值定义明确,因为整个组的值都相同:
SELECT
COUNT(*) AS totalCount,
city,
ANY_VALUE(STRUCT(
DATE_TRUNC(timeInterval.intervalStart, YEAR) AS start
)) as timeSpan
FROM
sandbox.CountByCity
GROUP BY
city, DATE_TRUNC(timeInterval.intervalStart, YEAR);
Run Code Online (Sandbox Code Playgroud)
这是使用一些示例数据的示例:
WITH `sandbox.CountByCity` AS (
SELECT 'Seattle' AS city, STRUCT(DATE '2017-12-11' AS intervalStart) AS timeInterval UNION ALL
SELECT 'Seattle', STRUCT(DATE '2016-11-10' AS intervalStart) UNION ALL
SELECT 'Seattle', STRUCT(DATE '2017-03-24' AS intervalStart) UNION ALL
SELECT 'Kirkland', STRUCT(DATE '2017-02-01' AS intervalStart)
)
SELECT
COUNT(*) AS totalCount,
city,
ANY_VALUE(STRUCT(
DATE_TRUNC(timeInterval.intervalStart, YEAR) AS start
)) as timeSpan
FROM
`sandbox.CountByCity`
GROUP BY
city, DATE_TRUNC(timeInterval.intervalStart, YEAR);
Run Code Online (Sandbox Code Playgroud)
你也可以考虑提交功能请求,以使GROUP BY与STRUCT类型。
| 归档时间: |
|
| 查看次数: |
2386 次 |
| 最近记录: |