据我了解,如果某些字段的表达式包含聚合函数,则不接受同一查询中的普通字段 - 每个字段应该是聚合的,或者包含在“group by”部分中。是这样吗?
如果我有一个带有一些聚合函数的查询文本,并且我有一个脚本(任何语言),它确定非聚合字段,如果它们不存在,它在逻辑上是否会自动将它们包含到组部分中?还是存在某些情况下它不正确?
谢谢
最佳答案
这有点复杂。但您的问题的简单答案是,是的,您应该包含所有非聚合列/表达式。
下面有两个警告。如果您有表达式,请务必包含表达式,而不是列。所以不要这样做:
select date(datetimecol), count(*)
from t
group by datetimecol;
正确的逻辑是:
select date(datetimecol), count(*)
from t
group by date(datetimecol);
第二个警告涉及主键。如果 a_id
是 a
中的主键,那么这样就可以了:
select a.*, count(*)
from a join
b
on <whatever>
group by a.a_id;
但是,包含 group by
中的所有列也是正确的。
注意:这称为函数依赖,并且受到标准 SQL 的支持。然而,MySQL 是实际实现此功能的少数数据库之一。
关于mysql - 非分组字段和具有聚合函数的字段可以同时存在吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59607939/