Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SQL中找到第二和第三高薪?_Sql_Database_Oracle - Fatal编程技术网

如何在SQL中找到第二和第三高薪?

如何在SQL中找到第二和第三高薪?,sql,database,oracle,Sql,Database,Oracle,如何在SQL中找到第二和第三高薪 我尝试了以下语法: SELECT FIRST_NAME, SALARY FROM EMPLOYEES E1 WHERE 2-1 = (SELECT COUNT(DISTINCT SALARY) FROM EMPLOYEES E2 WHERE E1.SALARY > E2.SALARY); 但我需要拿到第二和第三..n最高工资?试试看

如何在SQL中找到第二和第三高薪

我尝试了以下语法:

SELECT FIRST_NAME, SALARY
FROM EMPLOYEES E1 WHERE 2-1 = (SELECT COUNT(DISTINCT SALARY)
                               FROM EMPLOYEES E2
                               WHERE E1.SALARY > E2.SALARY);
但我需要拿到第二和第三..n最高工资?

试试看:


with cte as 
SELECT row_number() over (partition by employeename order by salary desc  )rk ,FIRST_NAME, SALARY
FROM EMPLOYEES )
select * from cte where rk in (2,3)

您可以使用order by和limit函数

SELECT FIRST_NAME, SALARY
FROM EMPLOYEES
ORDER BY SALARY DESC
LIMIT 3

干杯

简单的逻辑尝试先找到最高工资,然后再从中找到次最高工资

Select Max(SALARY)            // Third Highest
FROM EMPLOYEES 
where 
SALARY<(Select Max(SALARY)          // Second Highest Salary
From EMPLOYEES 
Where 
SALARY < (Select Max(Salary)      // Highest Salary
From Employees))
Select Max(SALARY)//第三高
来自员工
哪里

薪水我不知道你的表格是如何设置的,但假设
薪水
名字的多少

WITH
    theRank AS
    (
        SELECT
            FIRST_NAME,
            SALARY

        FROM
            EMPLOYEES

        ORDER BY SALARY DESC
    )

    SELECT
        *
    FROM
        theRank
    WHERE
        rownum = 3 -- change to the top X you want

这首先按工资降序对所有员工进行排序,然后,您可以选择您想要的最高层人数。

提示:使用
row\u number()
rank()
。看看这似乎是MYSQL语法,但OP希望在ORACLE中使用它。这不会返回任何行,因为薪资最高的行将根据
ROWNUM=3
过滤器和
1=3
进行测试,因此该行将被丢弃,然后测试第二高的行,然后,由于上一行将被丢弃,因此也将给出
ROWNUM
的值1,并且,
1=3
再次为false,该行将被丢弃。。。对所有行重复,得到一个空的结果集。我认为在中间子查询中需要<代码> max(薪水)< /代码>使它成为一个有效的解决方案…如果你想要
N
第四个最高值,当你增加
N
时,它的伸缩性很差。是的,这是一个有点打字错误。我编辑了答案:D