where条件里为什么不能有聚合函数 您所在的位置:网站首页 聚码接码是不是不能用了 where条件里为什么不能有聚合函数

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

2024-05-30 09:37| 来源: 网络整理| 查看: 265

转自: 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 employees where avg(salary)>6000 group by department_id --having avg(salary)>6000

原因。

sql语句的执行顺序为

 from子句

where 子句

group by 子句

having 子句

select 子句

order by 子句

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

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



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有