首页 > 解决方案 > 谁能解释这个查询是如何工作的?

问题描述

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

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

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

请解释查询,因为我不确定。

标签: oracle

解决方案


让我首先说编写查询的更好方法是:

select e.*
from (select e.*, dense_rank() over (order by sal desc) as seqnum
      from emp e
     ) e
where seqnum = 2;

您的查询在做什么?一步一步来:

  • 外部查询对emp.
  • 比较计算大于行中薪水的不同薪水的数量。
  • 如果恰好有 1 个更大的薪水,则保留该行。

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


推荐阅读