Mysql 非分组字段和具有聚合函数的字段是否可以同时存在?
据我所知,如果表达式中有一些字段包含聚合函数,则不接受同一查询中的普通字段-每个字段都应该是聚合字段,或者包含在“groupby”部分中。是这样吗 如果我有一个带有一些聚合函数的查询文本,并且我有一个脚本(任何语言),用于确定非聚合字段,那么如果它们不存在,自动将它们包含到分组部分在逻辑上是否正确?或者存在一些不正确的情况Mysql 非分组字段和具有聚合函数的字段是否可以同时存在?,mysql,sql,Mysql,Sql,据我所知,如果表达式中有一些字段包含聚合函数,则不接受同一查询中的普通字段-每个字段都应该是聚合字段,或者包含在“groupby”部分中。是这样吗 如果我有一个带有一些聚合函数的查询文本,并且我有一个脚本(任何语言),用于确定非聚合字段,那么如果它们不存在,自动将它们包含到分组部分在逻辑上是否正确?或者存在一些不正确的情况 谢谢这有点复杂。但您的问题的简单答案是,是的,您应该包括所有非聚合列/表达式 接下来是两个警告。如果有表达式,请确保包含表达式,而不是列。所以不要这样做: select da
谢谢这有点复杂。但您的问题的简单答案是,是的,您应该包括所有非聚合列/表达式 接下来是两个警告。如果有表达式,请确保包含表达式,而不是列。所以不要这样做:
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;
选择一个*,计数(*)
从一个连接
B
在…上
按a.a_id分组;
但是,将分组依据中的所有列包括在内也是正确的
注意:这称为函数依赖,由标准SQL支持。然而,MySQL是为数不多的实际实现此功能的数据库之一。边缘情况(如果存在)必须非常罕见,以至于忽略。顺便说一句,我想说,标题和正文中的问题略有不同