sql – HAVING没有GROUP BY

前端之家收集整理的这篇文章主要介绍了sql – HAVING没有GROUP BY前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
>根据标准(!)sql可能有以下可能:
>为了符合标准(如果还没有),应该做什么最小的变化?
>它可以像MysqL中的预期那样工作,如果第一行的NumberOfPages有最大值.

选择 *
从书
HAVING NumberOfPages = MAX(NumberOfPages)

以下是标准书写的:

HAVING <search condition>

  • Let G be the set consisting of every column referenced by a <column reference> contained in the <group by clause>.
  • Each column reference directly contained in the <search condition> shall be one of the following:
    1. An unambiguous reference to a column that is functionally dependent on G.
    2. An outer reference.

source

有人可以解释一下,为什么it should be possible按照标准?

MysqL中,它完美的工作.

解决方法

尽管有 Mimer Validator的结果,我不相信你的标准sql是有效的.

没有GROUP BY子句的HAVING子句在标准sql中是有效的(可以说是)有用的语法.因为它以一个一个一个表的形式操作,可以这么说,只有使用聚合函数才有意义.在你的例子中:

Book HAVING NumberOfPages = MAX(NumberOfPages)

是无效的,因为在考虑整个表时,NumberOfPages是指哪一行?同样,只有在SELECT子句中使用文字值才有意义.

考虑这个例子,这是有效的标准sql

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

尽管没有DISTINCT关键字,查询永远不会返回多行.如果HAVING子句满足,那么结果将是一行,单列包含值’T'(表示我们有不同页数的书),否则结果将是空集,即零行与单个柱.

我认为查询MysqL中没有错误的原因是由于在SELECT子句(标准行为是相反的方式)之后HAVING子句(逻辑上)成立的,因为隐式的GROUP BY其他答案中提到的条款.

原文链接:https://www.f2er.com/mssql/83085.html

猜你在找的MsSQL相关文章