SQL查询的HAVING子句只能使用聚合函数吗?

问题描述 投票:0回答:1

[我们在HAVINGGROUP BY上的数据库讲师的幻灯片对此声明:

enter image description here

[不幸的是,由于围绕该主题的SEO如此饱和,因此几乎不可能找到可以回答我的问题的资源。我可以找到很多示例,其中HAVING确实用于聚合,但这是否必然意味着它必须使用聚合?

根据我的理解和经验,HAVING子句不必only使用分组属性或出现在集合中的属性(即使它[[can,与之对应的WHERE不同)。]

据我所知,创建HAVING是因为WHERE无法在组级别操作。

所以,是什么使我无法使用HAVING子句中的任何其他条件,例如普通的旧HAVING attribute = value条件,其中attribute既不出现在GROUP BY中,也不出现在SELECT中条款?从视觉上来讲,我说:

非常有意义。

“仅​​选择在该列下一行具有此值的那些组。”

sql having
1个回答
0
投票
HAVING类似于发生在[[after聚合中的WHERE子句。以下两个查询在功能上是相同的(假设省略号是兼容的):

select key1, key2, . . . from t group by key1, key2 having . . . 和:

select x.*
from (select key1, key2, . . . 
      from t
      group by key1, key2
     ) x
having . . .

having子句可以引用:

select中的汇总值。

    group by中的键。
  • 不带参数的函数(例如当前日期)。
  • 由以上组成的表达式。
  • 它不能引用不是键的未聚合列。这些列根本不存在于group by生成的结果集中。
  • 有一个例外,我对此有解释的危险。一些数据库支持功能上依赖于group by键的列。这在英语中的意思是,如果查询是通过唯一/主键聚合的,则该表中的其他列可以与非聚合功能一起使用。但是,这是对通用规则的扩展,该通用规则是having子句中的引用仅是在聚合中可用的那些引用。
  • © www.soinside.com 2019 - 2024. All rights reserved.