【357天】我愛刷題系列116(2018.01.28)

叨叨兩句

  1. ~

SQL習題011

1

獲取當前(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_date date NOT NULL,
PRIMARY KEY (emp_no,from_date));spa

select emp_no,salary
from salaries
where to_date = '9999-01-01'
order by salary desc
limit 1,1;

2

題目描述
查找當前薪水(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));3d

【注意】看看討論連接,裏面有個MySQL的坑
https://www.nowcoder.com/profile/1989208/codeBookDetail?submissionId=20473665

我不知道WebSQL上求max(salaries)會把全部的最高工資顯示出來,仍是隻顯示一個,
可是在MySQL中,只顯示一個,這樣若是第二高的工資人數有多個的話,上述方法會漏掉其餘人,
select e.emp_no, salary, last_name, first_name
from employees as e inner join salaries as s
where e.emp_no = s.emp_no and s.to_date='9999-01-01'
and salary = 
(select max(salary) from salaries where salary < (select max(salary) from salaries)) 
這個是個人方案。
相關文章
相關標籤/搜索