bigquery:GROUP BY 列表中不存在表达式“f0_”

Posted

技术标签:

【中文标题】bigquery:GROUP BY 列表中不存在表达式“f0_”【英文标题】:bigquery: Expression 'f0_' is not present in the GROUP BY list 【发布时间】:2017-12-08 17:29:43 【问题描述】:

我想计算出现在某个纬度/经度点的某些字段值的实例。 Lat/Lon 是字符串,所以我将它们转换为浮点数,然后将它们四舍五入到 1m(小数点后 5 位)。

SELECT
  concat(ROUND(FLOAT(lat), 5),
    ROUND(FLOAT(lon), 5)),
  COUNT(field) AS fcount
FROM
  MyTable
GROUP BY
  lat,
  lon,
  fcount;

作为结果,我希望每个纬度/经度连接的某个值出现在“字段”的值中的次数。

我的输出应该类似于以下元组:

  lat    lon  field fcount
12.34  12.38      A     23
12.34  12.38      B     11
12.34  12.38      C     23
11.34  12.38      A     15
...

上面的查询在 BigQuery 中给我一个 Expression 'f0_' is not present in the GROUP BY list 错误。但如果我把它放进去,它会说:不能按聚合分组。我需要一些帮助来构建这个查询。

【问题讨论】:

【参考方案1】:

为了让您的查询正常工作,您应该尝试如下方式(看起来您使用 BigQuery Legacy SQL - 所以下面是 Legacy SQL)

#legacySQL
SELECT
  CONCAT(STRING(ROUND(FLOAT(lat), 5)),
    STRING(ROUND(FLOAT(lon), 5))) as latlong,
  COUNT(field) AS fcount
FROM
  MyTable
GROUP BY 1  

当然,它绝不会返回您所说的您希望查询返回的内容

为此,您应该在下面尝试

#legacySQL
SELECT
  ROUND(FLOAT(lat), 5) lat,
  ROUND(FLOAT(lon), 5) lon,
  field,
  COUNT(field) AS fcount
FROM
  MyTable
GROUP BY 1, 2, 3

【讨论】:

以上是关于bigquery:GROUP BY 列表中不存在表达式“f0_”的主要内容,如果未能解决你的问题,请参考以下文章

google bigquery SQL group by 聚合函数

BigQuery 对两列使用 Group By 函数,顺序无关紧要

关于ORA-00979 不是 GROUP BY 表达式错误的解释

BigQuery GROUP BY/GROUP EACH BY 资源超出错误,但查询不包含 GROUP BY 运算符

BIGQUERY 中的 COUNT() 和 GROUP BY

BigQuery 和 GROUP BY 子句