《資料庫SQL實戰》不使用order by

2021-08-09 01:46:25 字數 1190 閱讀 2469

此題來自於nowcoder,要求不使用order by 取排名第二多的資料。

題目:

查詢當前薪水(to_date=』9999-01-01』)排名第二多的員工編號emp_no、薪水salary、last_name以及first_name,不准使用order by

create tableemployees(

emp_noint(11) not null,

birth_datedate not null,

first_namevarchar(14) not null,

last_namevarchar(16) not null,

genderchar(1) not null,

hire_datedate not null,

primary key (emp_no));

create tablesalaries(

emp_noint(11) not null,

salaryint(11) not null,

from_datedate not null,

to_datedate not null,

primary key (emp_no,from_date));

解析:

本題主要思想為多層select巢狀與max()函式結合,兩次max()的巢狀使用即為次高者。

select s.emp_no,max(s.salary),e.last_name,e.first_name

from salaries as s join employees as e on s.emp_no=e.emp_no

where s.to_date=』9999-01-01』

and s.salary not in (select max(salary) from salaries where s.to_date=』9999-01-01』)

資料庫SQL實戰

無emp no birth date first name last name gender hire date 10008 1958 02 19 saniya kalloufi m1994 09 15 示例1無 無 select from employeesorder byhire datedes...

資料庫SQL實戰

找出所有員工當前 to date 9999 01 01 具體的薪水salary情況,對於相同的薪水只顯示一次,並按照逆序顯示 create table salaries emp no int 11 not null,salary int 11 not null,from date date not ...

資料庫SQL實戰

獲取當前 to date 9999 01 01 薪水第二多的員工的emp no以及其對應的薪水salary create table salaries emp no int 11 not null,salary int 11 not null,from date date not null,to d...