我是神谕的初学者。在最近的搜索中,我看到了WHERE N-1,3-2 ..so。
它在搜索数据时是如何工作的?
到目前为止,这是我的代码调度:
SELECT name, salary
FROM #Employee e1
WHERE N-1 = (SELECT COUNT(DISTINCT salary) FROM #Employee e2
WHERE e2.salary > e1.salary)发布于 2018-09-06 15:41:26
这是一个经典的(也是相当古老的) SQL查询,可以获得第9位最高的薪水。我猜想它不再在任何制作代码中使用(我还没见过),但可能是面试官最喜欢的问题。
您所指的N不是一个列或某个未知实体,而是一个占位符,它应该在工作查询中转换为有效的整数或绑定参数。它是一个相关子查询,该子查询为外部查询处理的每一行计算一次子查询。它的工作方式是,它从薪资大于来自外部查询的每个员工的员工那里获取一个不同的薪资值列表,并限制该计数等于N1的结果。
一种更常用的方法是使用分析函数dense_rank() (或根据您的需要使用rank )。如果您不知道这些函数的文档,请阅读它们。
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语法也是一个方便的选项。
SELECT *
FROM employees
ORDER BY salary DESC OFFSET 6 ROWS FETCH FIRST 1 ROWS WITH TIES; --n=6https://stackoverflow.com/questions/52206227
复制相似问题