首页 > 数据库 > mysql教程 > 可以在没有 GROUP BY 子句的 SQL 中使用 HAVING 吗?

可以在没有 GROUP BY 子句的 SQL 中使用 HAVING 吗?

Susan Sarandon
发布: 2024-12-29 18:12:10
原创
1002 人浏览过

Can HAVING be Used in SQL Without a GROUP BY Clause?

HAVING 子句可以在没有 GROUP BY 子句的情况下使用吗?

SQL 标准概述了使用 HAVING 子句的具体标准,其中包括引用功能上依赖于 GROUP BY 子句或外部引用的列。然而,所提供的查询提出了是否可以在没有 GROUP BY 的情况下使用 HAVING 的问题。

标准 SQL 规范

根据标准,不带 GROUP BY 的 HAVING 子句没有明确禁止 GROUP BY 子句。但是,该查询表现出可疑的行为:

SELECT *
FROM Book
HAVING NumberOfPages = MAX(NumberOfPages)
登录后复制

此查询在 HAVING 子句中使用聚合函数 (MAX),但它不指示应选择哪个特定行。因此,它的行为并没有严格由标准定义。

MySQL 实现

MySQL 将此查询解释为好像存在隐式 GROUP BY 子句,仅选择行具有最大 NumberOfPages 值。此行为不符合标准。

不符合标准的原因

标准要求 HAVING 子句对 GROUP BY 子句定义的行组进行操作。其目的是根据聚合值过滤掉组。使用不带 GROUP BY 的 HAVING 会允许对任意条件进行过滤,可能会导致意外结果。

有效的标准 SQL 查询

使用不带 GROUP BY 的 HAVING 的有效标准 SQL 查询将为:

SELECT 'T' AS result
FROM Book
HAVING MIN(NumberOfPages) < MAX(NumberOfPages);
登录后复制

此查询检查最小 NumberOfPages 值是否小于最大值值,如果为 true,则返回结果为“T”的单行;如果为 false,则返回空集。此行为符合 HAVING 适用于在整个表上操作的聚合函数的标准要求。

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板