MySQL學習筆記(三)【Leecode】
阿新 • • 發佈:2018-11-08
【Leecode】175. 組合兩個表
解答:由於是組合兩個表的資訊,很容易想到連線查詢,這裡使用左連線
select p.Firstname,p.Lastname,q.City,q.State from Person as p left join Address as q on p.PersonId=q.PersonId;
【Leecode】176. 第二高的薪水
解答:
第一種解法: 我們很容易知道第一高的薪水(max函式),所以,除去第一高的薪水再找最高的薪水,就是第二高的薪水了
select max(Salary) as SecondHighestSalary fromEmployee where Salary not in (select max(Salary) from Employee);
第二種解法:按薪水從高到低排序,再找第二條資料就是第二高薪水了。limit 1表示讀取一行資料, offset 1 表示從表的第二行開始讀取
select Salary as SecondHighestSalary from Employee order by Salary desc limit 1 offset 1;
【Leecode】181. 超過經理收入的員工
解答:
這裡是同一個表中的欄位值的比較,所以可以為這張表建兩個別名(當作兩張表)。
第一種解法:直接找出員工的薪水和對應的經理的薪水,進行比較
select e1.Name as Employee from Employee as e1 where e1.Salary>(select e2.Salary from Employee as e2 where e1.ManagerId=e2.Id)
第二種解法:使用join連線查詢,相當於把表劃分為員工表和經理表,再對各自的薪水進行比較
select e1.Name as Employee from Employee as e1 join Employee as e2 where e1.ManagerId=e2.Id and e1.Salary>e2.Salary
【Leecode】182. 查詢重複的電子郵箱
解答:首先想到應該就是根據 Email 分組,再計算每個分組的行數是否大於1.
select Email from Person group by Email having count(Email)>1
【Leecode】183. 從不訂購的客戶
解答:
第一種解法:直接查詢使用者表的Id不在訂單表中出現過的使用者即可
select Name as Customers from Customers where Id not in (select CustomerId from Orders)
第二種解法:左連線查詢。以使用者表為基準,連線訂單表,查詢CustomerId為空的資料
select c.Name as Customers from Customers as c left join Orders as o on o.CustomersId=c.Id and o.CustomerId is null