如何在SQL中找到第二和第三高薪?
如何在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最高工资?试试看
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