1. 程式人生 > >MySQL學習筆記(三)【Leecode】

MySQL學習筆記(三)【Leecode】

【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 from
Employee 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