已是深夜,面对万家灯火。孤身在外地,孤独感油然而生。下了班已经晚上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后面中的道理。(这个逻辑需要好好思考)

那么这个问题如何通过只用集合函数解决呢?

百思不得其解。也希望有人看到这篇文章能共同思考共同探讨。