where条件里为什么不能有聚合函数

编程入门 行业动态 更新时间:2024-10-22 10:35:03

where条件里为什么不<a href=https://www.elefans.com/category/jswz/34/1770615.html style=能有聚合函数"/>

where条件里为什么不能有聚合函数

转自: SQL中where子句中不能出现聚合函数的原因_sql聚合函数不允许出现where_这孩子谁懂哈的博客-CSDN博客

首先我们应该熟悉什么聚合函数:

例如SUM(),MIN(),Max()这类的,我们称作是聚合函数。

那么我们不能在where子句中使用这些函数,为什么呢?

聚集函数也叫列函数,它们都是基于整列数据进行计算的,而where子句则是对数据行进行过滤的(这里过滤是在一个记录里边过滤的,基于"行"),在筛选过程中依赖“基于已经筛选完毕的数据得出的计算结果”是一种悖论,这是行不通的。更简单地说,因为聚集函数要对全列数据时行计算,因而使用它的前提是:结果集已经确定!

而where子句还处于“确定”结果集的过程中,因而不能使用聚集函数。

与where子句不能出现聚集函数正相反的是,我们几乎看不到不使用聚集函数的having子句。为什么?因为在水平方向上根据外部指定条件的筛选(也就是对行的筛选),where子句可以独立完成,剩下的往往都是需要根据结果集自身的统计数据进一步筛选了,这时,几乎都需要通过having子句配合聚集函数来完成。

按照下面这个就是错误的,会报一个错误:Group function is not allowed here

select department_id,avg(salary)from employeeswhere avg(salary)>6000group by department_id--having avg(salary)>6000

原因。

sql语句的执行顺序为

 from子句

where 子句

group by 子句

having 子句

select 子句

order by 子句

首先得知道聚合函数是对结果集运算的,当在where子句使用聚合函数时,此时根据group by 分割结果集的子句还没有执行,此时只有from 后的结果集。

所以无法在where子句中使用聚合函数。

更多推荐

where条件里为什么不能有聚合函数

本文发布于:2024-02-12 11:49:22,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1687669.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:能有   函数   条件

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!