获取工资第二高的员工姓名
Get the name of the employee with the second highest salary
我必须得到薪水第二高的员工的名字,table 我从那里获取的名字是 emp
。我知道第二高薪水的查询是
select max(sal)
from emp
where sal < (select max(sal) from emp)
有效,而且 returns 是正确答案。
但我还必须获得员工的姓名。我只是试了一下
select name, max(sal)
from emp
where sal < (select max(sal) from emp)
我收到这个错误:
ORA-00937: not a single-group group function
如何删除错误才能同时获得姓名和薪水。
感谢所有提供帮助的人。
使用这个:
with cte (
select ROW_NUMBER() over(order by sal desc)rnum ,name,sal from emp )
select * from cte where rnum = 2
您可以使用 window 函数轻松获得它。尝试这样的事情:
SELECT name, sal
FROM emp
QUALIFY RANK OVER(ORDER BY sal DESC) = 2
这将按薪水对您的行进行排序,然后为每一行赋予一个排名。然后它将 return 具有 ranking = 2
的行。
如果要确保只返回一行,请将 RANK
更改为 ROW_NUMBER
。
您可以使用
select name,sal from emp where sal = (select max(sal) from emp where sal < (select max(sal) from emp));
我必须得到薪水第二高的员工的名字,table 我从那里获取的名字是 emp
。我知道第二高薪水的查询是
select max(sal)
from emp
where sal < (select max(sal) from emp)
有效,而且 returns 是正确答案。
但我还必须获得员工的姓名。我只是试了一下
select name, max(sal)
from emp
where sal < (select max(sal) from emp)
我收到这个错误:
ORA-00937: not a single-group group function
如何删除错误才能同时获得姓名和薪水。 感谢所有提供帮助的人。
使用这个:
with cte (
select ROW_NUMBER() over(order by sal desc)rnum ,name,sal from emp )
select * from cte where rnum = 2
您可以使用 window 函数轻松获得它。尝试这样的事情:
SELECT name, sal
FROM emp
QUALIFY RANK OVER(ORDER BY sal DESC) = 2
这将按薪水对您的行进行排序,然后为每一行赋予一个排名。然后它将 return 具有 ranking = 2
的行。
如果要确保只返回一行,请将 RANK
更改为 ROW_NUMBER
。
您可以使用
select name,sal from emp where sal = (select max(sal) from emp where sal < (select max(sal) from emp));