微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

UNNEST表达式引用列既未分组也未汇总

如何解决UNNEST表达式引用列既未分组也未汇总

我的第一个答案是该问题的原始版本。 当我回答时,我意识到您已将其更改为另一种:o)

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

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

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

在初始查询中,您需要对每一行的所有记录进行展平,这就是为什么需要将它们重新分组的原因

解决方法

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

触发以下错误:

错误 :UNNEST表达式引用既未分组也未汇总的列匹配项

我知道UNNEST(hits)必须以某种方式将其分组或聚合,但是由于此列是array (repeated),它的确切含义是什么?

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

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

然后我得到一个Grouping by expressions of type STRUCT is not allowed错误。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。