首页 >数据库 >mysql教程 >在 SQL 中可以使用 HAVING 而不使用 GROUP BY 吗?

在 SQL 中可以使用 HAVING 而不使用 GROUP BY 吗?

Linda Hamilton
Linda Hamilton原创
2024-12-30 21:15:11857浏览

Can You Use HAVING Without GROUP BY in SQL?

不带 GROUP BY 的 HAVING:SQL 异常

在标准 SQL 中,是否可以使用不带 GROUP BY 子句的 HAVING 子句?

问题1:标准SQL合规性

提供的示例查询:

SELECT *
FROM Book
HAVING NumberOfPages = MAX(NumberOfPages)

与 SQL 标准相矛盾。根据标准,HAVING 子句中的所有列引用必须引用功能上依赖于 GROUP BY 子句中指定的列集的列。然而,该查询缺少 GROUP BY 子句,使其不标准。

问题 2:MySQL 兼容性

该查询仅在特定条件下在 MySQL 中工作,其中结果的第一行包含 NumberOfPages 的最大值。此行为可能是由于 MySQL 在没有 GROUP BY 子句的情况下处理 HAVING 子句所致。

问题 3:标准 SQL 合理性

标准禁止不带 GROUP 的 HAVING 子句BY 子句,因为它们在指定哪些行满足 HAVING 条件时会产生歧义。对于作为整体考虑的表表达式,没有选择特定行与聚合函数进行比较的逻辑基础。

有效标准 SQL 查询的示例:

此查询演示了不带 GROUP BY 子句的 HAVING 子句的有效使用:

SELECT 'T' AS result
FROM Book
HAVING MIN(NumberOfPages) < MAX(NumberOfPages);

查询始终返回值为“T”的单行(表示页数不同的书籍)或空集(无行)。

结论:

虽然样本查询在MySQL中工作,它不符合标准SQL。标准 SQL 禁止使用没有 GROUP BY 子句的 HAVING 子句,以避免歧义并确保逻辑一致性。

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

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