当前位置: 首页 > 面试题库 >

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

燕琨
2023-03-14
问题内容

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错误。

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


问题答案:

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

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

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

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

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



 类似资料:
  • 我试图调试一个旧的jsp站点,所以我在运行Windows7的本地机器上安装了tomcat 7和Netbean IDE 7.2.1,并设置了一切。但是当我运行它时,我得到一个错误: SEVERE: Servlet.service()为servlet jsp抛出异常org.apache.jasper.JasperExcture: /pages/caselisting.jsp(行: 133,列: 35)

  • 我有以下用于javascript密码验证的正则表达式: 正则表达式规则是: 12-25个字符 至少有一个大写字母 至少有一个小写字母 至少有一个数字 至少有一个特殊字符:!#$%()*,-./:;=?@[]^ `{124;}~ 然而,正则表达式似乎不起作用。它匹配任何字符。我该怎么解决这个问题?

  • 本文向大家介绍正则表达式常用用法汇总,包括了正则表达式常用用法汇总的使用技巧和注意事项,需要的朋友参考一下 在没看正文之前,先给大家介绍下正则表达式基本概念: 正则表达式,又称正规表示法、常规表示法。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则。在很多文本编辑器里,正

  • 问题内容: 我试图以一种优雅的方式编写一个函数,该函数将字典列表进行分组并汇总(加和)like键的值。 例: 我尝试使用itertools为groupby进行此操作,并对每个相似键值对进行求和,但是这里缺少一些内容。这是我的函数当前的样子: 问题答案: 您可以使用和。 使用dict可以在中完成,而排序则需要时间。 的优点是它将自动将相似键的值相加。 例:

  • 问题内容: 我想在程序的输出日志上进行正则表达式匹配(在Python中)。日志包含如下几行: 我想捕获在以VALUE开头的行的第一次出现之后出现的数字列表。即,我希望它返回。问题是我事先不知道会有多少个数字。 我试图将其用作正则表达式: 这与行匹配,但只捕获了最后一个值,所以我得到了(‘119’,)。 问题答案: 您要查找的是 解析器 ,而不是正则表达式匹配项。在您的情况下,我会考虑使用一个非常简

  • 问题内容: 如何在MySQL中使用正则表达式引用组?我试过了: 但它不起作用。这个怎么做? 问题答案: 您不能,在MySql中无法引用正则表达式捕获组。