获取薪水第二高的员工姓名[重复]
Posted
技术标签:
【中文标题】获取薪水第二高的员工姓名[重复]【英文标题】:Get the name of the employee with the second highest salary [duplicate] 【发布时间】:2019-09-15 07:16:41 【问题描述】:我必须得到薪水第二高的员工的姓名,我从中获取的表名是emp
。我知道第二高薪水的查询是
select max(sal)
from emp
where sal < (select max(sal) from emp)
它有效,它返回正确的答案。
但我还必须得到员工的姓名。我只是尝试过
select name, max(sal)
from emp
where sal < (select max(sal) from emp)
我收到此错误:
ORA-00937: 不是单组群函数
我怎样才能删除错误以便同时获得姓名和薪水。 感谢任何提供帮助的人。
【问题讨论】:
【参考方案1】:你可以使用
select name,sal from emp where sal = (select max(sal) from emp where sal < (select max(sal) from emp));
【讨论】:
非常感谢先生。你能解释一下错误吗???? 当然。问题是 SELECT 不能同时具有组函数(例如 AVG、COUNT、MAX、MIN 等)和单个列表达式(例如名称或薪水)。在这种情况下,如果单个列表达式包含在 GROUP BY 子句中,则可以使用它。错误是说您尝试执行需要 GROUP BY 子句但没有 GROUP BY 子句的 SELECT 语句。希望这会有所帮助:)【参考方案2】:使用这个:
with cte (
select ROW_NUMBER() over(order by sal desc)rnum ,name,sal from emp )
select * from cte where rnum = 2
【讨论】:
【参考方案3】:您可以使用窗口函数轻松实现这一点。试试这样的:
SELECT name, sal
FROM emp
QUALIFY RANK OVER(ORDER BY sal DESC) = 2
这将按薪水对您的行进行排序,然后为每一行提供一个排名。然后它将返回带有ranking = 2
的行。
如果您想确保只返回一行,请将RANK
更改为ROW_NUMBER
。
【讨论】:
以上是关于获取薪水第二高的员工姓名[重复]的主要内容,如果未能解决你的问题,请参考以下文章