我有一张表sal_info,如下所示
ID NAME SAL DEPTNO
100 SARMA 5000 10
101 SARATHI 5000 10
102 RAJESH 4000 10
103 PRAVEEN 4000 20
104 GOPI 4000 20
105 SHANKAR 3000 20
106 SHIVA 2000 30
107 SWAMI 1000 30
108 MOHAMED 500 30
我需要提取每个deptno上具有最高薪水的行
我的输出应该是
ID NAME SAL DEPTNO
100 SARMA 5000 10
101 SARATHI 5000 10
103 PRAVEEN 4000 20
104 GOPI 4000 20
106 SHIVA 2000 30
我怎样才能完成这个
我试过这个。
select * from dummy_tab where sal in (select max(sal) from dummy_tab)
它是根据表格中的最高工资向我提供的。我需要把它包括在所有的部门中。
任何想法.......
答案 0 :(得分:2)
分析功能最适用于此。在这种情况下,我会使用RANK
。请注意,该链接包含RANK
函数的聚合和分析风格的文档;这是你想要阅读的分析性的。
查询将如下所示:
SELECT ID, Name, Sal, DeptNo
FROM (
SELECT
ID,
Name,
Sal,
DeptNo,
RANK() OVER (PARTITION BY DeptNo ORDER BY Sal DESC) AS SalRank
FROM sal_info
)
WHERE SalRank = 1
要更深入地了解RANK
的工作原理,请尝试仅运行内部查询。这将显示排名分配。
答案 1 :(得分:1)
SELECT *
FROM
SAL_INFO
WHERE
(DEPTNO, SAL)
IN
(
SELECT
DEPTNO, MAX(SAL)
FROM SAL_INFO
GROUP BY DEPTNO
)
答案 2 :(得分:0)
@Tamim Salem
我用来获取我为你的答案指定的第二个条件的结果的查询
select * from dummy_tab where (deptno,sal) in
(select deptno, max(sal) from
(select * from dummy_tab
where (deptno,sal) in
(
select deptno,max(sal) from dummy_tab group by deptno having count(*)>1
)
) y group by y.deptno having count(*)>1
)