2011-09-10 22 views
2

我想列出所有比平均工資更高的員工。我在這一個上迷失了方向。我需要加起來所有的薪水,然後平均他們,只顯示那些比平均水平更高的薪水。我需要很多幫助。薩爾的平均值然後降序排列

我查詢不工作

SQL> select empno, ename, job, hiredate, sal, deptno from emp where sal avg(sal); 
select empno, ename, job, hiredate, sal, deptno from emp where sal avg(sal) 
                   * 
ERROR at line 1: 
ORA-00920: invalid relational operator 
SQL> 

SQL> select empno, ename, job, hiredate, sal, deptno from emp; 

EMPNO ENAME  JOB  HIREDATE   SAL  DEPTNO 
---------- ---------- --------- --------- ---------- ---------- 
    7839 KING  PRESIDENT 17-NOV-81  5000   10 
    7698 BLAKE  MANAGER 01-MAY-81  2850   30 
    7782 CLARK  MANAGER 09-JUN-81  2450   10 
    7566 JONES  MANAGER 02-APR-81  2975   20 
    7654 MARTIN  SALESMAN 28-SEP-81  1250   30 
    7499 ALLEN  SALESMAN 20-FEB-81  1600   30 
    7844 TURNER  SALESMAN 08-SEP-81  1500   30 
    7900 JAMES  CLERK  03-DEC-81  950   30 
    7521 WARD  SALESMAN 22-FEB-81  1250   30 
    7902 FORD  ANALYST 03-DEC-81  3000   20 
    7369 SMITH  CLERK  17-DEC-80  800   20 

EMPNO ENAME  JOB  HIREDATE   SAL  DEPTNO 
---------- ---------- --------- --------- ---------- ---------- 
    7788 SCOTT  ANALYST 09-DEC-82  3000   20 
    7876 ADAMS  CLERK  12-JAN-83  1100   20 
    7934 MILLER  CLERK  23-JAN-82  1300   10 

14 rows selected. 

回答

4

你得到無效的關係運算符錯誤,因爲你中堂省略查詢中的less than 跡象。請學會閱讀the documentation.

除此之外,您需要編寫一個子查詢來計算平均工資。所以你的查詢應該看起來像這樣:

select empno, ename, job, hiredate, sal, deptno 
from emp 
where sal > (select avg(sal) from emp) 
order by sal desc; 
4

Oracle不支持windowed functions?我不確定是否可以直接在WHERE子句中使用窗口函數,但至少可以從使用該表的查詢中推導出表格,然後在條件中引用相應的列:

SELECT 
    empno, ename, job, hiredate, sal, deptno 
FROM (
    SELECT 
    empno, ename, job, hiredate, sal, deptno 
    AVG(sal) OVER() AS avgsal 
    FROM emp 
) s 
WHERE sal > avgsal 
相關問題