N 高薪

17 Mar 2025 | 6 分钟阅读

在表中查找 N-th 最高薪资(2nd、3rd 或 nth 最高薪资)是面试中最重要且最常见的问题。

在这里,我们将向您展示编写 SQL 查询以在表中查找 nth 最高薪资的最佳且最简单的方法。

为了说明这一点,我们使用名为 Emp 的表,其中包含员工的详细信息,如 EID、ENAME 和 SALARY。Emp 表中的数据如下所示:

表名:Emp

EIDENAME工资
1Amit20000
2Bhaskar30000
3Chandan25000
4Durgesh28000
5Parul30000
6Garima25000
7Akshita28000
8Sonu40000
9Ravi37000
10Rajesh320000

用于计算名为 Emp 的数据库表中第二高薪资的 SQL 查询

查询:1

输出

MIN(SALARY)
-----------
      37000

Emp 表的结构和数据

Nth Highest salary

输出屏幕

Nth Highest salary

让我们来理解这个查询是如何工作的。

用于计算名为 Emp 的数据库表中第二高薪资的 SQL 查询

查询:2

输出

ENAME            SALARY          Rank
------------          ----------       ----------
ravi                   37000            2

Nth Highest salary

让我们来理解这个查询是如何工作的。

用于计算名为 Emp 的数据库表中第二高薪资的 SQL 查询

假设任务是从上面的表中计算员工的 N-th 最高薪资。过程如下:

  1. 第一个任务是识别具有 TOP n 个不相似(不重复)薪资的员工。
  2. 计算上面查询产生的所有薪资中的最低薪资,通过这样做,我们得到 nth 最高薪资。
  3. 从上述查询的结果中,识别薪资为最低薪资的员工的详细信息。

查询号:3

上述 SQL 查询将找出薪资为 nth 最高薪资的员工的详细信息。

让我们详细了解上述 SQL 查询的工作原理。

  • 假设 n = 5。

服务器的处理方式是,它从最内部的查询开始,查询:“select distinct TOP 5 salary from emp order by salary desc” 将生成以下结果

  • 下一个外部查询是:“select min(salary) from emp where salary IN (上一个 SQL 查询的结果)”。这将产生以下结果

从上面的结果可以验证,所需的**第五**高薪资是 28000。

  • 最后,最外部的查询是:“select * from emp where salary = 上一个 SQL 查询的结果”。此查询的结果将是拥有**第五**高薪资的员工的详细信息。

查询的工作原理

由于这些是嵌套查询,因此此查询涉及内部查询的使用。内部查询有两种版本:**关联查询**和**非关联查询**。非关联查询是指内部查询可以独立于外部查询运行的查询,而关联查询是指内部查询与外部查询协同运行的查询。我们用来计算 nth 最高薪资的查询就是关联查询的一个例子。

SQL 查询的性能分析

从上面我们了解到,内部查询在每次执行时,都会处理外部查询的单行,这最终会带来大量的性能开销,尤其是在行数非常多的情况下。

为避免这种情况,建议使用特定数据库的关键字来更快地获得结果。


下一个主题12 Codd?s 规则