此題來自於nowcoder,要求不使用order by 取排名第二多的資料。
題目:
查詢當前薪水(to_date=』9999-01-01』)排名第二多的員工編號emp_no、薪水salary、last_name以及first_name,不准使用order by解析:create table
employees
(
emp_no
int(11) not null,
birth_date
date not null,
first_name
varchar(14) not null,
last_name
varchar(16) not null,
gender
char(1) not null,
hire_date
date not null,primary key (
emp_no
));create table
salaries
(
emp_no
int(11) not null,
salary
int(11) not null,
from_date
date not null,
to_date
date not null,primary key (
emp_no
,from_date
));
本題主要思想為多層select巢狀與max()函式結合,兩次max()的巢狀使用即為次高者。
select s.emp_no,max(s.salary),e.last_name,e.first_namefrom 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...