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

前端之家收集整理的这篇文章主要介绍了为什么不能再where语句中直接使用聚合函数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

1.问题描述

select deptno,avg(sal) from empwhere 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后

聚合函数应该用在having子句中。

聚合函数如果想用在where中的话,应该只能用子查询来实现(在子查询中进行聚合函数计算,然后在主查询中进行where判断)。

代码

  1. selectdeptno,avg(sal)fromempgroupbydeptnohavingcount(deptno)>3;
原文链接:https://www.f2er.com/javaschema/283463.html

猜你在找的设计模式相关文章