where 后面可以接聚合函数吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了where 后面可以接聚合函数吗相关的知识,希望对你有一定的参考价值。

select ID from 考试成绩表 where 分数<AVG(分数)

这样可以吗?

select ID from 考试成绩表 where 分数<AVG(分数)
这样写是不可以包含的
参考技术A 聚合函数不应出现在 WHERE 子句中,除非该聚合位于 HAVING 子句或选择列表所包含的子查询中,并且要对其进行聚合的列是外部引用。本回答被提问者采纳 参考技术B 不可,可以用连接操作

为啥聚合函数不能放在where后面?

聚合函数要使用的话,有一个前提,那就是是必须要有结果集。正如当初传智播客出的书中写到。
根据mysql的执行步骤,当程序执行到where的时候,mysql是没有结果集的,所以聚合函数不能用在where后面。
但聚合函数为什么就可以放在having后面呢?原因是使用having,前面一定要有分组,而分组的时候就已经有结果了,所以就有结果集,满足聚合函数前面一定要有结果集的要求。
参考技术A 聚合函数应该用在having子句中。
聚合函数如果想用在where中的话,应该只能用子查询来实现(在子查询中进行聚合函数计算,然后在主查询中进行where判断)。

以上是关于where 后面可以接聚合函数吗的主要内容,如果未能解决你的问题,请参考以下文章

为啥不能再where语句中直接使用聚合函数

为啥sql查询语句中的count(*)等聚合函数可以放在having后面,而不能放在where后面?

SQL 中 where 后面可不可以跟上子查询

在SQL中的聚合函数

四.Oracle聚合函数和内外全连接

SQL中where后不能跟聚合函数