有人可以解释此查询的工作原理吗?

时间:2018-10-31 11:01:40

标签: oracle

这是一个SQL查询,用于查找员工的N最高薪水:

SELECT *
FROM emp t
WHERE 1 = (SELECT COUNT(DISTINCT sal)
           FROM emp t2
           WHERE t2.sal > t.sal)

我不知道它如何返回结果。如果在WHERE子句中输入1,它将返回第二高的薪水,而返回2则返回第三高薪,依此类推。

请确保我不确定该查询。

1 个答案:

答案 0 :(得分:4)

让我首先说一个更好的查询写方法:

print(repr(string))

您的查询在做什么?逐步进行:

  • 外部查询正在对select e.* from (select e.*, dense_rank() over (order by sal desc) as seqnum from emp e ) e where seqnum = 2; 中的每一行进行比较。
  • 比较会计算比行中薪水高的不同薪水数。
  • 如果只有1个薪水更大,则保留该行。

换句话说,这将保留所有薪水第二高的行。 emp是编写查询的一种更明智的方法(并且它也具有更好的性能)。