BigQuery 和 GROUP BY 子句

Posted

技术标签:

【中文标题】BigQuery 和 GROUP BY 子句【英文标题】:BigQuery and GROUP BY clause 【发布时间】:2014-01-16 06:30:40 【问题描述】:

我试图弄清楚 Google BigQuery 在聚合和分组方面的工作原理。我阅读了文档,上面写着 GROUP BY:

GROUP BY 子句允许您对具有相同值的行进行分组 对于给定的字段。然后,您可以对每个执行聚合函数 团体。分组发生在任何选择或聚合之后 SELECT 子句。

所以它说在分组后我可以执行聚合函数(我假设这是像 COUNT 这样的函数)。但比后面的句子说分组发生在 SELECT 子句中的任何选择或聚合之后。

如果我有

SELECT f1, COUNT(f2)
  FROM ds.Table
  GROUP BY f1;

先发生哪个,分组还是计数?

【问题讨论】:

试图理解问题的目标:如果是一个或另一个会有什么不同? @fh 关键是要了解大查询的工作原理......我实际上不知道如果它在 group by 之前进行聚合,它是如何工作的......但这就是它在文档中所说的。所以我希望有人能解释一下。而且因为您是 Google 开发者关系团队的一员,所以您似乎是这个问题的完美人选:) 我明白你的意思。当我们在内部查看文档时,请放心,BigQuery 在这种情况下会做它唯一能做的事情。感谢您的反馈! 我不确定您是否真的想知道 BQ 是如何工作的,或者只是指出文档中的奇怪解释。在第一种情况下,据我所知,BQ 是基于 Dremel 的,你可以试试这个:link 【参考方案1】:

您将拥有组,然后是计数。在您的情况下,您会为每个 f1 获得一行,然后是计数。

但是,如果你想做一些有趣的事情,你可以使用窗口函数,首先你可以按一些字段分组,然后你可以对结果行执行函数,这非常方便。

查看 bigquery 在线文档的窗口函数部分,了解一些相关示例。

【讨论】:

以上是关于BigQuery 和 GROUP BY 子句的主要内容,如果未能解决你的问题,请参考以下文章

google bigquery SQL group by 聚合函数

SQL Server报错:选择列表中的列无效,因为该列没有包含在聚合函数或 GROUP BY 子句中

only_full_group_by : "ORDER BY 子句不在 GROUP BY 子句中"

BIGQUERY 中的 COUNT() 和 GROUP BY

在连接中使用 Where 子句,以及 Group by 和 Order By

我们如何在具有GROUP BY子句的查询中选择非聚合列,而GROUP BY子句在功能上不依赖于GROUP BY子句中的列?