Sql 仍然混淆了关于选择列、分组依据和联接的规则

Sql 仍然混淆了关于选择列、分组依据和联接的规则,sql,group-by,syntax,Sql,Group By,Syntax,我仍然对使用groupby的语法规则感到困惑。我知道当存在一些聚合函数时,我们使用分组方式。如果我在SQL语句中甚至有一个聚合函数,我是否需要将所有选定的列放入我的GROUP BY语句中?我没有要询问的特定查询,但当我尝试进行连接时,会出现错误。特别是,当我在语句和/或联接中使用count(*)时,我似乎把它搞砸了 我在工作中使用BigQuery。我经常被奇怪的知识空白所迷惑 谢谢大家! 这有点复杂 首先,聚合查询中不需要聚合函数。所以这是允许的: select a from t group b

我仍然对使用
groupby
的语法规则感到困惑。我知道当存在一些聚合函数时,我们使用
分组方式。如果我在SQL语句中甚至有一个聚合函数,我是否需要将所有选定的列放入我的
GROUP BY
语句中?我没有要询问的特定查询,但当我尝试进行连接时,会出现错误。特别是,当我在语句和/或联接中使用count(*)时,我似乎把它搞砸了

我在工作中使用BigQuery。我经常被奇怪的知识空白所迷惑


谢谢大家!

这有点复杂

首先,聚合查询中不需要聚合函数。所以这是允许的:

select a
from t
group by a;
select max(a)
from t;
顺便说一下,这相当于:

select distinct a
from t;
如果有聚合函数,则不需要
groupby
。因此,这是允许的:

select a
from t
group by a;
select max(a)
from t;
这样一个聚合查询——没有
groupby
——总是返回一行。即使表为空或
where
子句过滤掉所有行,这也是正确的。在这种情况下,大多数聚合函数返回
NULL
,显著的例外是
count()
返回
0

接下来,如果在
选择中混合使用聚合函数和非聚合表达式,则通常需要在
分组中使用非聚合、非常量表达式。我应该指出,你可以做到:

这应该是可行的,但有时BigQuery会混淆,并希望表达式位于
组中

最后,SQL标准支持如下查询:

select t.*, count(*)
from t join
     u
     using (foo)
group by t.a;

a
t
中的主键(或等效键)时。但是,BigQuery没有主键,因此这与该数据库无关。

显然,不同的RDBMS之间的语法可能略有不同,但作为一般规则,任何属于SELECT语句但未聚合的列都需要包含在GROUP BY中。如果您随后开始合并表联接,那么它可能会稍微复杂一些,这取决于您的预期结果。你说你没有一个特定的查询,但你也说你得到了错误——所以你必须有你正在运行的查询,这些查询产生了错误。最好包括一个示例查询,然后您可以得到一些更具体的建议谢谢!当我再次遇到查询时,我将使用查询进行更新。非常感谢。非常感谢。我很感激。“t.*”是一种获取给定表的所有记录的方法吗?我不熟悉那种结构。谢谢大家!@利勒蒙格拉布
t.*
是一种拉入
t
引用的所有列的方法。