两种思路
思路1: 利用子查询得出第二多的薪水是数值,通过SELECT DISTINCT 和降序排序,可以得到salary的一个list,然后通过LIMIT 1, 1,即从第1位以后开始取,取一行数,这个数值即为第二多的薪水的值。然后通过WHERE等于第二多薪水的值对员工进行筛选
SELECT emp_no, salary FROM salaries WHERE salary = ( SELECT DISTINCT salary AS second_salary FROM salaries WHERE to_date = '9999-01-01' ORDER BY salary DESC LIMIT 1,1 ) ORDER BY emp_no ASC;思路2: 利用窗口查询DENSE_RANK() OVER()
dense_rank():并列连续型排序。比如,数值为99,99,90,89,那么通过这个函数得到的排名为1,1,2,3
首先,通过窗口查询对salary进行排序
首先,通过窗口查询对salary进行排序
SELECT emp_no, salary FROM ( SELECT *, DENSE_RANK() OVER(ORDER BY salary DESC) AS salary_rank FROM salaries WHERE to_date = '9999-01-01' ) AS table_1 WHERE salary_rank = 2;