SQL牛客一些錯題反思
阿新 • • 發佈:2020-11-27
題目1
查詢各個部門當前(dept_manager.to_date=‘9999-01-01’)領導當前(salaries.to_date=‘9999-01-01’)薪水詳情以及其對應部門編號dept_no
(注:輸出結果以salaries.emp_no升序排序,並且請注意輸出結果裡面dept_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
));CREATE TABLE
dept_manager
(dept_no
char(4) NOT NULL, – ‘部門編號’emp_no
int(11) NOT NULL, – ‘員工編號’to_date
date NOT NULL,PRIMARY KEY (
emp_no
,dept_no
));
select s.emp_no,salary,from_date,s.to_date,d.dept_no from salaries s join dept_manager d on s.emp_no=d.emp_no where d.to_date='9999-01-01' and s.to_date='9999-01-01' order by s.emp_no
- 對於整個表的排序直接在後面進行order by 排序
- 拿到題目,進行兩表相連時,最好先那支筆梳理下,變數有哪些,以至於列明表時注意會出現ambiguious的情況
題目2
查詢入職員工時間排名倒數第三的員工所有資訊,為了減輕入門難度,目前所有的資料裡員工入職的日期都不是同一天
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
));
select emp_no,birth_date,first_name,last_name,gender,hire_date from
(select *, row_number() over(order by hire_date desc)排名 from employees) a
where 排名=3
入職時間的倒數,就是hire_date按照進行從大到小排序時,第三個
desc 是從大到小,倒序排序
asc 是從小到大,升序排序