先看題目自己試著解一下,有困難的同學可以先看考點解析試下,
最后再看SQL解答,有不同意見和解法的歡迎評論區(qū)留言交流
來源:大廠面試真題
題目:
來源:面試真題
Whose salary is higher than their manager for Month “2018-05” ? (Base on “Salary” table)
table:Salary
EmployeeID | ManagerID | Salary | Month |
---|---|---|---|
1001 | 1003 | 2000 | 2018-05 |
1002 | 1003 | 2500 | 2018-05 |
1003 | 1004 | 2250 | 2018-05 |
1004 | 1005 | 3000 | 2018-05 |
1001 | 1003 | 1500 | 2018-06 |
1002 | 1003 | 1500 | 2018-06 |
1003 | 1004 | 1050 | 2018-06 |
1004 | 1005 | 2400 | 2018-06 |
題目數據下載
結果輸出
考點解析
表的自連接,內連接,左連接和where條件篩選
邏輯口述:文章來源:http://www.zghlxwxcb.cn/news/detail-524217.html
每個人都是員工也可能是另一個員工的經理,用managerID 和EmployeeID 去管理,得到不同經理的工資,然后去做比較即可文章來源地址http://www.zghlxwxcb.cn/news/detail-524217.html
SQL代碼
# 方法一 自連接
SELECT
s1.EmployeeID, s1.ManagerID,
s1.Salary Salary_Employee,
S2.Salary Salary_Manager,S1.`Month`
FROM salary s1,salary s2
where s1.ManagerID = s2.EmployeeID
and s1.`Month` = s2.`Month`
and s1.`Month` = "2018-05"
and s1.Salary > S2.Salary;
# 方法二 inner自連接
SELECT
s1.EmployeeID,
s1.ManagerID,
s1.Salary Salary_employee,
s2.Salary Salary_Manager,
S1.`Month`
FROM salary s1
inner join salary s2
on s1.ManagerID = S2.EmployeeID
and s1.`Month` = s2.`Month`
where s1.`Month` = "2018-05"
having Salary_employee > Salary_Manager
--having也可以寫在where 里 and s1.Salary > s2.Salary;
# 方法三 左連接
SELECT * FROM salary s1
left join
(select distinct EmployeeID,Salary,`Month` from salary) s2
on s1.ManagerID = S2.EmployeeID
and s1.`Month` = s2.`Month`
where s1.`Month` = "2018-05";
到了這里,關于100天SQL面試刷題 Day005的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!