子查询的问题

时间:2013-02-22 10:01:20

标签: oracle11g

EMP表格

EMPNO ENAME  JOB        MGR  HIREDATE    SAL   COMM  DEPTNO
7369  SMITH  CLERK      7902  17-DEC-80  800         20
7499  ALLEN  SALESMAN   7698  20-FEB-81  1600  300   30
7521  WARD   SALESMAN   7698  22-FEB-81  1250  500   30
7566  JONES  MANAGER    7839  02-APR-81  2975        20
7654  MARTIN SALESMAN   7698  28-SEP-81  1250  1400  30
7698  BLAKE  MANAGER    7839  01-MAY-81  2850        30
7782  CLARK  MANAGER    7839  09-JUN-81  2450        10
7788  SCOTT  ANALYST    7566  19-APR-87  3000        20
7839  KING   PRESIDENT        17-NOV-81  5000        10
7844  TURNER SALESMAN   7698  08-SEP-81  1500     0  30
7876  ADAMS  CLERK      7788  23-MAY-87  1100        20
7900  JAMES  CLERK      7698  03-DEC-81  950         30
7902  FORD   ANALYST    7566  03-DEC-81  2900        20
7934  MILLER CLERK      7782  23-JAN-82  1300        10

查找薪水超过部门平均工资的所有员工

2 个答案:

答案 0 :(得分:0)

这应该这样做:

select empno, ename, job, mgr, hiredate, sal, comm, deptno
  from (select e.*, avg(sal) over (partition by deptno) avgsal
          from emp e)
 where sal > avgsal;

答案 1 :(得分:0)

你可以通过两种方式做到这一点......一个分区(如上所述)并且使用相关查询完成同样的事情是代码:

SELECT eemp.*
 FROM emp  eemp
 WHERE eemp.SAL > (SELECT avg(SAL)
    FROM emp
    WHERE DEPTNO = eemp.DEPTNO);

如果有任何澄清,请告诉我!