SQL每日一練【180604】

SQL每日一練【180604】

題目:獲取員工其當前的薪水比其manager當前薪水還高的相關信息,當前表示to_date=9999-01-01

來源:牛客網

結果第一列給出員工的emp_no,

第二列給出其manager的manager_no,

第三列給出該員工當前的薪水emp_salary,

第四列給該員工對應的manager當前的薪水manager_salary

CREATE TABLE `dept_emp` (

`emp_no` int(11) NOT NULL,

`dept_no` char(4) NOT NULL,

`from_date` date NOT NULL,

`to_date` date NOT NULL,

PRIMARY KEY (`emp_no`,`dept_no`));

CREATE TABLE `dept_manager` (

`dept_no` char(4) NOT NULL,

`emp_no` int(11) NOT NULL,

`from_date` date NOT NULL,

`to_date` date NOT NULL,

PRIMARY KEY (`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`));


解答:

select emp_no, manager_no, emp_salary, manager_salaryfrom (select de.dept_no, de.emp_no, s.salary as emp_salaryfrom dept_emp de inner join salaries s on de.emp_no = s.emp_nowhere s.to_date = "9999-01-01") as table1 left join(select dem.dept_no, dem.emp_no as manager_no, s.salary as manager_salaryfrom dept_manager dem inner join salaries s on dem.emp_no = s.emp_nowhere s.to_date = "9999-01-01") as table2 on table1.dept_no = table2.dept_nowhere emp_salary > manager_salary;

沒想到寫完提交就一遍過了,還以為要被虐很久。滿負荷工作了一天腦子都不好使了居然一次性做對了,雞凍 (?>?<?) !

乍一看是道挺難的題:

1)需要兩個salary,明顯不可能一次select就做到,所以想到了子語句,創建兩個表再拼起來:一個是員工表(帶工資的),一個是經理表(帶工資的)。

2)但這樣還不夠,這兩張表需要一個共同的key,所以創建這兩張表的時候要把dept_no帶上。

3)另外還有些小細節,比如說第一行select選擇出來的欄位的順序,還比如說to_date的限定。

就醬啦,晚安,但願明天也能順利!


推薦閱讀:

MySQL主從同步延遲調查
資料庫ER圖基礎概念整理
交通與安防影像管理
資料庫(一)
數據分析在各行各業怎麼用?(二)——「智能」證券報表系統建設

TAG:SQL | MySQL | 資料庫 |