数据库刷题:获取当前薪水第二多的员工的emp_no以及其对应的薪水salary

一、题目

描述

有一个员工表employees简况如下:

emp_no  birth_date  first_name  last_name  gender hire_date 
10001 1953-09-02 Georgi      Facello     M 1986-06-26
10002 1964-06-02 Bezalel     Simmel      F 1985-11-21
10003   1959-12-03 Parto       Bamford     M 1986-08-28
10004   1954-05-01 Chirstian   Koblick     M 1986-12-01

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

emp_no  salary from_date  to_date
10001 88958 2002-06-26 9999-01-01
10002 72527 2001-08-02 9999-01-01
10003 43311 2001-12-01 9999-01-01
10004 74057 2001-11-27 9999-01-01

请你查找薪水排名第二多的员工编号emp_no、薪水salary、last_name以及first_name,不能使用order by完成,以上例子输出为:

(温馨提示:sqlite通过的代码不一定能通过mysql,因为SQL语法规定,使用聚合函数时,select子句中一般只能存在以下三种元素:常数、聚合函数,group by 指定的列名。如果使用非group by的列名,sqlite的结果和mysql 可能不一样)

emp_no  salary last_name first_name
10004 74057 Koblick Chirstian

二、分析以及SQL语句

核心就是找到薪水排名第二的员工的salary值,思路就是先查出所有员工的最高薪水,比最高薪水少的就是第二高的薪水了。

select a.emp_no,salary,last_name,first_name
from employees a
join salaries b
on a.emp_no = b.emp_no
where salary = 
(
    select max(salary)
    from salaries
    where salary < (select max(salary) from salaries)
)

你可能感兴趣的:(软件测试面试-数据库,数据库,功能测试)