mysql - 非分组字段和具有聚合函数的字段可以同时存在吗?

标签 mysql sql

据我了解,如果某些字段的表达式包含聚合函数,则不接受同一查询中的普通字段 - 每个字段应该是聚合的,或者包含在“group by”部分中。是这样吗?

如果我有一个带有一些聚合函数的查询文本,并且我有一个脚本(任何语言),它确定非聚合字段,如果它们不存在,它在逻辑上是否会自动将它们包含到组部分中?还是存在某些情况下它不正确?

谢谢

最佳答案

这有点复杂。但您的问题的简单答案是,是的,您应该包含所有非聚合列/表达式。

下面有两个警告。如果您有表达式,请务必包含表达式,而不是列。所以不要这样做:

select date(datetimecol), count(*)
from t
group by datetimecol;

正确的逻辑是:

select date(datetimecol), count(*)
from t
group by date(datetimecol);

第二个警告涉及主键。如果 a_ida 中的主键,那么这样就可以了:

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/

相关文章:

mysql - 选择属于多个类别的行

mysql - 如何编写查询来选择值而不再次重复相同的值?

php - 获取线程中的最新消息

mysql - 对平均函数进行 SQL 查询

sql - 使用 SQL 计算列中的项目数

sql - 需要提交 SQL 双 "commit"

c# - SQL 到 LINQ 转换器

php - 如何搜索一个月中的任何一天?

python - peewee mysql SSL : CERTIFICATE_VERIFY_FAILED

php - 编辑 mysql 数据库表中预先存在的数据