如果有人能帮助我查询,我真的很感激。
我需要它来显示其他人的最高工资和工资之间的差异。
select e.ename, f.sal, e.sal
from emp e , (select max(sal) as "sal" from emp) f
where 1=1 ;
我在哪里犯了错误?
提前致谢!
答案 0 :(得分:3)
select
name
, sal
, max_sal - sal as diff
from (
select
e.ename
, e.sal
, max(salary) over() as max_sal
from emp e
) d
我建议使用max(salary) over()
解析(或窗口)函数将最大工资放在子查询的每一行上,然后用它来计算差值。这种聚合形式不需要group by clause
。
答案 1 :(得分:0)
select e.ename,
e.sal sal_of_others,
(select max(sal) from emp where ename = e.ename ) - e.sal sal_diff
from emp e
答案 2 :(得分:0)
无需在不必要的地方使用条件,也可以使用子查询,如下所示
SELECT e.ename, e.sal, (select max(sal) from emp) - E.Sal as difference
FROM emp e
答案 3 :(得分:0)
您可以使用分析函数来查找最高工资 - 这样就无需查询表格两次:
select ename,
sal,
max(sal) over () max_overall_sal,
max(sal) over (partition by deptno) max_sal_per_dept
from emp;
我已经给你两种方法来找到最高工资 - 一个在整个数据集(over ()
)和一个部门(over (partition by deptno)
),因为我不确定你想要什么。
如果您不熟悉分析功能,我强烈建议您查阅它们。在它们的基本形式中,它们与聚合函数的工作方式类似,除了折叠行之外,它们报告每行的值。 partition by
子句以与group by
在聚合查询中相同的方式对数据进行分组。
答案 4 :(得分:0)
使用以下查询
select ename,sal,((select max(sal) from emp)-sal) as saldiff from emp