为什么不能再where语句中使用聚合函数

来源:互联网 发布:c语言面向对象 编辑:程序博客网 时间:2024/06/06 06:32

1.问题描述

select deptno ,avg(sal) from emp where count(*)>3 group by deptno; 在where 句中使用聚合函数count(*),报出错误:ORA-00934: group function is not allowed here

那是为什么呢?

2.问题解决:

大致解释如下,sql语句的执行过程是:from-->where-->group by -->having --- >order by --> select;

聚合函数是针对结果集进行的,但是where条件并不是在查询出结果集之后运行,所以主函数放在where语句中,会出现错误,

而having不一样,having是针对结果集做筛选的,所以我门一般吧组函数放在having中,用having来代替where,having一般跟在group by后


sql语句的执行过程是:from-->where-->group by -->having --- >order by --> select;
聚合函数是针对结果集进行的,但是where条件并不是在查询出结果集之后运行,所以主函数放在where语句中,会出现错误,
而having不一样,having是针对结果集做筛选的,所以我门一般吧组函数放在having中,用having来代替where,having一般跟在group by后


代码:

[sql] view plain copy print?在CODE上查看代码片派生到我的代码片
  1. select deptno,avg(sal) from emp group by deptno having count(deptno)>3; 

1 0
原创粉丝点击