Sql 求sal的平均值,然后按降序排序
我想列出所有收入高于平均工资的员工。我有点迷路了。我需要把所有的薪水加起来,然后平均出来,只显示那些比平均工资高的。在这件事上我需要很多帮助 我的问题不起作用Sql 求sal的平均值,然后按降序排序,sql,oracle,aggregate-functions,Sql,Oracle,Aggregate Functions,我想列出所有收入高于平均工资的员工。我有点迷路了。我需要把所有的薪水加起来,然后平均出来,只显示那些比平均工资高的。在这件事上我需要很多帮助 我的问题不起作用 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)
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>
桌子
您将获得无效的关系运算符错误,因为您忽略了小于 登录您的查询。请学习阅读 除此之外,您还需要编写一个子查询来计算平均工资。因此,您的查询应该如下所示:
select empno, ename, job, hiredate, sal, deptno
from emp
where sal > (select avg(sal) from emp)
order by sal desc;
Oracle不支持吗?我不确定是否可以在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
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