已是深夜,面对万家灯火。孤身在外地,孤独感油然而生。下了班已经晚上9点30了,回到宾馆洗个澡,已经成了我的习惯。天天在沐浴中,方能心灵的宁静。
昨天谈到了oracle集函数的几个问题。今天就几个实际问题继续进行探讨。
1,按部门查找出各个部门的平均工资
SQL> select avg(sal) from emp
2 group by deptno;
AVG(SAL)
----------
1566.66666
2175
2916.66666
我想查看到部门号和部门名称,那么就添加查询条件呗,可是这个条件怎么写呢?平均的不能直接在表中对比到呀,试试吧
SQL> select avg(sal),deptno from emp
2 group by deptno;
select avg(sal),job from emp
group by deptno
ORA-00979: 不是 GROUP BY 表达式
出现错误,还是得从源头思考问题。错误的原因还是在sql语句的执行顺序上,首先from关键字找到要查询的表emp,然后group by 关键字将emp表按deptno分组,分成一个个组之后,聚合函数开始就没个分组进行计算,计算出来之后再把结果select出来,这时出来的数据都是分组后就没个分组进行运算的数据,显然出现deptno这个没有参加分组的数据是在逻辑上行不通的。这也是为什么如果前面没有聚合函数运算的聚合列一定要出现在group by后面中的道理。(这个逻辑需要好好思考)
那么这个问题如何通过只用集合函数解决呢?
百思不得其解。也希望有人看到这篇文章能共同思考共同探讨。