首页 >数据库 >mysql教程 >使用HAVING而不使用GROUP BY是标准SQL吗?

使用HAVING而不使用GROUP BY是标准SQL吗?

DDD
DDD原创
2024-12-31 00:12:26191浏览

Is Using HAVING Without GROUP BY Standard SQL?

HAVING without GROUP BY:标准 SQL 一致性

问题中呈现的查询结构:

SELECT *
FROM Book
HAVING NumberOfPages = MAX(NumberOfPages)

引发担心其根据标准 SQL 的有效性。该查询使用 HAVING 子句,但没有相应的 GROUP BY 子句。

标准 SQL 定义,如果 HAVING 子句的搜索条件满足特定条件,则 HAVING 子句有效。这些条件包括在功能上依赖于 GROUP BY 子句中引用的列或外部引用。

在给定的查询中,没有 GROUP BY 子句。因此,搜索条件 NumberOfPages = MAX(NumberOfPages) 不满足定义的条件,因为 NumberOfPages 对任何特定组没有明确的函数依赖性。

为了符合标准,查询需要修改为包含 GROUP BY 子句,例如:

SELECT *
FROM Book
GROUP BY BookId
HAVING NumberOfPages = MAX(NumberOfPages)

在此修改后的查询中,GROUP BY 子句对数据进行分区通过 BookId,为每本书创建不同的组。 HAVING 子句现在变得有效,因为它对这些组进行操作,检查是否有任何组包含具有最大 NumberOfPages 的行。

需要注意的是,某些数据库系统(例如 MySQL)可能允许此类查询,而无需GROUP BY 子句,但此行为被视为非标准扩展。

以上是使用HAVING而不使用GROUP BY是标准SQL吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn