1. 题目描述
1.1 输入
有一个薪水表salaries简况如下:
1.2 输出
请你获取薪水第二多的员工的emp_no以及其对应的薪水salary,以上例子输出如下:
2. 题目分析及解答
2.1 题目分析
该题被归类为简单难度,但实际上,并没有看上去那么简单。首先,由查询要求可能会想到如下的语句:
SELECT emp_no, salary FROM salaries ORDER BY salary DESC LIMIT 1 OFFSET 1;
但显然这是考虑不够全面的。这条语句无法解决以下的情况:
- 薪水最高的员工不止一个;
- 薪水第二个高的员工不止一个。
如果发生了第一种情况,该语句实际上输出的是薪水最高的某一个员工的记录;如果发生了第二种情况,只能输出某一个薪水第二高的员工的记录,而无法输出完整。因此,正确的思路是首先构造一个子查询找到第二高的薪水,此处不仅是考查ORDER BY子句,还考查了DISTINCT关键字;然后,以此作为WHERE子句的条件找到所有薪水排第二高的员工。
2.2 详细解答
根据题目分析可直接写出相应的SQL查询语句:
SELECT
emp_no,
salary
FROM
salaries
WHERE
salary = ( SELECT DISTINCT salary FROM salaries ORDER BY salary DESC LIMIT 1 OFFSET 1 );