获取薪水第二高的员工姓名[重复]

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

【讨论】:

以上是关于获取薪水第二高的员工姓名[重复]的主要内容,如果未能解决你的问题,请参考以下文章

数据库专题-leetcode176. 第二高的薪水

LeetCode SQL练习

LeetCode SQL练习

176. 第二高的薪水

LeetCode176——第二高的薪水

LeetCode--176--第二高的薪水