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圖基礎概念整理
※交通與安防影像管理
※資料庫(一)
※數據分析在各行各業怎麼用?(二)——「智能」證券報表系統建設