当前位置: 首页 > 面试题库 >

没有GROUP BY子句的MySQL聚合函数

常培
2023-03-14
问题内容

在MySQL中,我观察到尽管没有GROUP BY子句,但在SELECT列表中使用AGGREGATE
FUNCTION的语句被执行了。如果这样做,其他RDBMS产品(例如SQL Server)将引发错误。

例如,SELECT col1,col2,sum(col3) FROM tbl1;被执行而没有任何错误,并返回col1,col2的第一行值和col3的所有值之和。以上查询的结果是一行。

谁能告诉我为什么MySQL会发生这种情况?

提前致谢!!


问题答案:

这是设计使然-它是MySQL允许的标准的许多扩展之一。

对于像SELECT name, MAX(age) FROM t;参考文档这样的查询,它说:

如果没有GROUP BY,则只有一个组,并且不确定为该组选择哪个名称值

有关更多信息,请参阅分组处理文档。

该设置ONLY_FULL_GROUP_BY控制着这种行为,请参见5.1.7 Server SQL
Modes
启用此功能将不允许查询聚合函数缺少group
by语句的查询,并且默认情况下从MySQL版本5.7.5开始启用该查询。



 类似资料:
  • 问题内容: 简而言之,我有一个表格,其中除其他外,还包含一个用于时间戳记的列。我想获得具有最新(即最大价值)时间戳的行。目前,我正在这样做: 但是我宁愿做这样的事情: 但是,SQLite拒绝此查询: 该文件证实了这一行为(页面底部): 聚合函数只能在SELECT语句中使用。 我的问题是:是否可以编写查询以获取具有最大时间戳的行,而无需对select进行排序并将返回的行数限制为1?这似乎应该有可能,

  • 问题内容: 我(彻底)目前正在学习SQL,并遇到了该子句。 根据您提供的参数对结果集进行汇总或分组。如果在查询中使用此子句,则可以在结果集上执行聚合函数以查找结果集的统计信息,例如查找平均值或频率。 我的问题是:没有随附的聚合函数,GROUP BY语句是否有任何用处? 更新 使用的同义词是(可能)是一个坏主意,因为我怀疑它是慢。 问题答案: 没有随附的汇总功能,GROUP BY语句有什么用吗? 在

  • 我试图提供一个实用程序,在该实用程序中,我可以获得表中每列的最大数据长度。 > 我在列表中有列的列表。 我查看每个列表。 执行下面准备好的语句。 带有max函数的prepared语句似乎不能使用动态列。它给出的值不正确。 准备好的语句是否可以与select子句中的动态列一起工作。

  • 问题内容: 我在SO上找到了一些主题,但是仍然找不到适合我的查询的设置。 这是查询,在本地主机上运行得很好: 但是在Heroku上,我 遇到了-GROUP BY子句 上面的错误, 或者在聚合函数中使用 。 然后,我在某处读到,我应该指定表中的所有列,因此我尝试了以下操作: 但这在本地主机上不起作用,在Heroku上也不行… 什么是查询的正确配置? 问题答案: 我认为您正在尝试在同一列上进行汇总和分

  • 我们有一个员工姓名表,其中列有ID、name、salary 查询1不起作用,但查询2起作用。从我的开发经验来看,我觉得对此可能的解释是: sum()处理参数中指定的一组值。这里传递了'salary'列,因此它必须将此列的所有值相加。但是在where子句中,记录是一个接一个地检查的,就像第一条记录1是为了测试而检查的,等等。因此,不会计算sum(工资),因为它需要访问所有列的值,然后只有它返回一个值

  • 问题内容: 我想要做的是计算子查询返回的行数,本质上如下: 这是我的错误信息: 为什么这不起作用?如果select仅返回一堆具有过滤条件的行,为什么我不能计算行数或返回的行数? 我正在计算拥有的不同员工的数量。按分组。 这是有关我的数据库的一些结构信息,作为查询的一部分。 谢谢! 问题答案: 试试这个 或这个