Oracle WHERE 子句/搜索



我是甲骨文的初学者。在最近的搜索中,我看到了WHERE N-1,3-2..等等。

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

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

SELECT name, salary 
FROM #Employee e1
WHERE N-1 = (SELECT COUNT(DISTINCT salary) FROM #Employee e2
WHERE e2.salary > e1.salary)

这是一个经典的(而且相当古老的(SQL查询,可以获得第n个最高的薪水。我认为它不再在任何生产代码中使用(我没有看到(,但可能是面试官最喜欢的问题。

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

更常用的方法是使用分析函数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 )

在 Oracle 12c 及更高版本中,即使上述查询有效,也可以使用FETCH..FIRST语法。

SELECT *
FROM employees
ORDER BY salary DESC OFFSET 6 ROWS FETCH FIRST 1 ROWS WITH TIES; --n=6

最新更新