问题描述
获取当前(to_date='9999-01-01')薪水第二多的员工的 emp_no 以及其对应的薪水 salary。
方案一:使用 LIMIT
使用 LIMIT 1,1 从当前排序结果的第二条开始,选取 1 条记录。 但上述解答不够严谨。如果薪水第一多有多名员工,那么用 LIMIT 1, 1 取出来的就不一定是薪水第二的员工了。
方案二:嵌套查询
使用嵌套查询,首先找出排第二的薪水是多少。使用 GROUP BY 进行分组,并且限制时间必须是当前薪水,然后使用挑选出来的薪水去查找符合条件的记录。
方案三:性能优化
第二次解答仍然不够优秀。因为在子查询中我们返回的是薪水,在外层查询使用薪水去查询一条记录。如果表中的数据量很小的话,查询速度会很快;但是,当数据量非常大的时候就非常麻烦了。 令子查询返回员工号(emp_no),因为 emp_no 是主键,所以这样会更好的优化性能。


