首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle其中的子句/搜索

Oracle其中的子句/搜索
EN

Stack Overflow用户
提问于 2018-09-06 14:21:27
回答 1查看 54关注 0票数 0

我是神谕的初学者。在最近的搜索中,我看到了WHERE N-1,3-2 ..so。

它在搜索数据时是如何工作的?

到目前为止,这是我的代码调度:

代码语言:javascript
复制
SELECT name, salary 
FROM #Employee e1
WHERE N-1 = (SELECT COUNT(DISTINCT salary) FROM #Employee e2
             WHERE e2.salary > e1.salary)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-06 15:41:26

这是一个经典的(也是相当古老的) SQL查询,可以获得第9位最高的薪水。我猜想它不再在任何制作代码中使用(我还没见过),但可能是面试官最喜欢的问题。

您所指的N不是一个列或某个未知实体,而是一个占位符,它应该在工作查询中转换为有效的整数或绑定参数。它是一个相关子查询,该子查询为外部查询处理的每一行计算一次子查询。它的工作方式是,它从薪资大于来自外部查询的每个员工的员工那里获取一个不同的薪资值列表,并限制该计数等于N1的结果。

一种更常用的方法是使用分析函数dense_rank() (或根据您的需要使用rank )。如果您不知道这些函数的文档,请阅读它们。

代码语言:javascript
复制
SELECT first_name,
       salary
FROM (
     SELECT e.*,
            dense_rank() OVER(
                 ORDER BY salary desc
            ) rn
     FROM employees e
)
WHERE rn = 6; -- ( n = 6 )

在Oracle12c和更高版本中,即使上面的查询工作正常,使用FETCH..FIRST语法也是一个方便的选项。

代码语言:javascript
复制
SELECT *
FROM employees
ORDER BY salary DESC OFFSET 6 ROWS FETCH FIRST 1 ROWS WITH TIES; --n=6
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52206227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档