HAVING 不带 GROUP BY
根据 SQL 标准,HAVING 子句通常与 GROUP BY 子句结合使用来过滤组基于对这些组执行的聚合计算的行数。然而,某些数据库系统允许在不使用 GROUP BY 的情况下使用 HAVING 子句。
问题:
是否可以根据以下条件使用不带 GROUP BY 的 HAVING 子句SQL标准?
答案:
是的,可以在标准 SQL 中使用不带 GROUP BY 的 HAVING 子句。但是,此类查询的行为因所使用的数据库系统而异。
MySQL 行为:
在 MySQL 中,允许使用不带 GROUP BY 的 HAVING 子句,前提是结果集的第一行具有聚合列的最大值。此行为背离了 SQL 标准,该标准通常需要在存在 HAVING 子句的情况下使用 GROUP BY 子句。
SQL 标准解释:
SQL 标准定义了一个HAVING 子句作用于根据 GROUP BY 子句生成的结果集计算的聚合。如果没有 GROUP BY 子句,就不清楚 HAVING 子句引用了哪些行。
因此,根据 SQL 标准,没有 GROUP BY 的 HAVING 子句并不严格有效。但是,出于兼容性原因,某些数据库系统(例如 MySQL)可能允许此类查询。
有效标准 SQL 示例:
SELECT 'T' AS result FROM Book HAVING MIN(NumberOfPages) < MAX(NumberOfPages);
此查询是有效标准 SQL如果有不同数量的书籍,则将返回一行,其中一列包含值“T”
结论:
虽然在某些情况下使用不带 GROUP BY 的 HAVING 子句可能很方便,但需要注意的是,此类查询的行为并不标准化,并且可能因数据库系统而异。为了可靠的跨数据库兼容性,建议在过滤聚合计算时结合使用 GROUP BY 和 HAVING。
以上是标准 SQL 中可以在没有 GROUP BY 子句的情况下使用 HAVING 子句吗?的详细内容。更多信息请关注PHP中文网其他相关文章!