Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 非分组字段和具有聚合函数的字段是否可以同时存在?_Mysql_Sql - Fatal编程技术网

Mysql 非分组字段和具有聚合函数的字段是否可以同时存在?

Mysql 非分组字段和具有聚合函数的字段是否可以同时存在?,mysql,sql,Mysql,Sql,据我所知,如果表达式中有一些字段包含聚合函数,则不接受同一查询中的普通字段-每个字段都应该是聚合字段,或者包含在“groupby”部分中。是这样吗 如果我有一个带有一些聚合函数的查询文本,并且我有一个脚本(任何语言),用于确定非聚合字段,那么如果它们不存在,自动将它们包含到分组部分在逻辑上是否正确?或者存在一些不正确的情况 谢谢这有点复杂。但您的问题的简单答案是,是的,您应该包括所有非聚合列/表达式 接下来是两个警告。如果有表达式,请确保包含表达式,而不是列。所以不要这样做: select da

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

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


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

接下来是两个警告。如果有表达式,请确保包含表达式,而不是列。所以不要这样做:

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是为数不多的实际实现此功能的数据库之一。

边缘情况(如果存在)必须非常罕见,以至于忽略。顺便说一句,我想说,标题和正文中的问题略有不同