gpt4 book ai didi

sql - UNNEST 表达式引用既不分组也不聚合的列

转载 作者:行者123 更新时间:2023-12-02 05:12:37 24 4
gpt4 key购买 nike

Google Analytics BigQuery 表的结构如下(旧版 SQL 表示法 - 仅显示相关字段):

visitId:                      INTEGER
hits: RECORD/REPEATED
hits.hour: INTEGER

在这样一个表上,以下查询效果很好:

SELECT
visitId,
MIN(h.hour) AS firstHitHour
FROM
`my-table.ga_sessions_20161122`, UNNEST(hits) AS h
GROUP BY
visitId

但是使用这种替代语法:

SELECT
visitId,
(SELECT MIN(hour) FROM UNNEST(hits)) as firstHitHour
FROM
`my-table.ga_sessions_20161122`
GROUP BY
visitId

触发以下错误:

Error: UNNEST expression references column hits which is neither grouped nor aggregated

我知道 UNNEST(hits) 必须以某种方式分组或聚合,但由于此列是一个数组(重复),它到底意味着什么?

如果我尝试按要求“对列点击进行分组”,如下所示:

(SELECT MIN(hour) FROM UNNEST(hits) as h GROUP BY h) as firstHitHour

然后我收到不允许按 STRUCT 类型的表达式进行分组错误。

如何纠正此替代语法以产生与第一个语法相同的结果?

最佳答案

我的第一个答案是针对这个问题的原始版本。
当我回答时,我意识到你已经把它改成了完全不同的:o)

因此,以下答案适用于您问题的最新版本:

我认为在“替代”版本中,您根本不需要 GROUP BY,因为您对原始(未扁平化)逐行进行操作,并且对于每一行(visitId)您计算firstHitHour

SELECT
visitId,
(SELECT MIN(hour) FROM UNNEST(hits)) as firstHitHour
FROM
`my-table.ga_sessions_20161122`

在您的初始查询中 - 您会展平每行的所有记录 - 这就是您需要将它们分组的原因

关于sql - UNNEST 表达式引用既不分组也不聚合的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40792981/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com