0

我有一个表 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)

它根据表中的最高工资为我提供。我需要将它包含在所有部门编号中。

有任何想法吗.......

4

3 回答 3

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工作原理,请尝试仅运行内部查询。这将向您显示排名分配。

于 2013-07-16T14:40:29.533 回答
1
SELECT *
FROM 
   SAL_INFO
WHERE
    (DEPTNO, SAL)
    IN
    (
        SELECT 
            DEPTNO, MAX(SAL) 
        FROM SAL_INFO
        GROUP BY DEPTNO
    )

这是一个SQLFiddler

于 2013-07-16T14:44:01.757 回答
0

@塔米姆塞勒姆

我用来获取我为您的答案指定的第二个条件的结果的查询

    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
    )
于 2013-07-18T11:49:44.680 回答