1. 程式人生 > 資料庫 >SQL牛客一些錯題反思

SQL牛客一些錯題反思

題目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
  1. 對於整個表的排序直接在後面進行order by 排序
  2. 拿到題目,進行兩表相連時,最好先那支筆梳理下,變數有哪些,以至於列明表時注意會出現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 是從小到大,升序排序