题目描述

有一个薪水表 salaries 简况如下:

获取当前薪水第二多的员工的emp_no以及其对应的薪水salary - 图1

请你获取薪水第二多的员工 emp_no 以及其对应的薪水 salary
上述示例的查询结果为:

获取当前薪水第二多的员工的emp_no以及其对应的薪水salary - 图2

答案解析

如果每一位员工的薪水均不相同,我们可以将查询结果按照工资的降序排序,并取出第二条记录
SQL 语句如下:

  1. SELECT emp_no,salary
  2. FROM salaries
  3. ORDER BY salary DESC
  4. LIMIT 1 OFFSET 1;

但是,本题我们需要考虑到员工的薪水有相同的情况,如果是这种情况,那么按照第一种思路取出的记录不一定是当前薪水第二多的员工信息。
所以,考虑到工资第一多,第二多的员工有多个,我们可以使用子查询的方式。
首先,使用子查询将第二多的工资查询出,需要使用 GROUP BY 语句;然后主查询语句中筛选出工资等于第二多工资的员工记录即可,SQL 语句如下:

  1. SELECT emp_no,salary FROM salaries
  2. WHERE salary = (
  3. SELECT salary FROM salaries
  4. GROUP BY salary
  5. ORDER BY salary DESC
  6. LIMIT 1 OFFSET 1
  7. );