【LeetCode】【SQL】簡單類別合集

題目來源:LeetCode For English    ||  力扣中文版

題目類別:數據庫

題目難度:簡單

題目範圍:免會員版所有題目

目錄

 

175.組合兩個表

176.第二高的薪水

181.超過經理收入的員工

182.查找重複的電子郵箱

183.從不訂購的客戶

196.刪除重複的電子郵箱

197.上升的溫度

595.大的國家

596.超過5名學生的課

620.有趣的電影

627.交換工資

1179.重新格式化部門表


 

175.組合兩個表

SELECT FirstName, LastName, City, State FROM Person LEFT JOIN Address ON
 Person.PersonId = Address.PersonId;

外連接

在左外連接和右外連接時都會以一張表爲基表,該表的內容會全部顯示,然後加上兩張表匹配的內容。如果基表的數據在另一張表沒有記錄。那麼在相關聯的結果集行中列顯示爲空值(NULL)。

查詢的是左表所有數據以及其交集部分。

 

 

176.第二高的薪水

SELECT (SELECT DISTINCT Salary FROM Emplyee OEDER BY Salary DESC LIMIT 1,1) 
AS SecondHightestSalary; 

或者使用IFNULL 

SELECT IFNULL( (SELECT DISTINCT Salary FROM Employee ORDER BY Salary DESC LIMIT 1,1), null ) 
AS SecondHighestSalary;

SQL查詢語句中的 limit 與 offset 的區別:

  • limit y 分句表示: 讀取 y 條數據
  • limit x, y 分句表示: 跳過 x 條數據,讀取 y 條數據
  • limit y offset x 分句表示: 跳過 x 條數據,讀取 y 條數據

 

 

181.超過經理收入的員工

SELECT a.Name AS 'Employee' FROM Employee AS a, Employee AS b 
WHERE a.ManagerId = b.Id AND a.Salary > b.Salary;

 

 

182.查找重複的電子郵箱

SELECT Email FROM Person GROUP BY Email having count(Email)>1;

where 和 having的區別?

  1. where 在分組之前進行限定,如果不滿足條件,則不參與分組。having在分組之後進行限定,如果不滿足結果,則不會被查詢出來
  2. where 後不可以跟聚合函數,having可以進行聚合函數的判斷。

 

 

183.從不訂購的客戶

SELECT Name AS 'Customers' 
FROM Customers 
WHERE  Customers.Id NOT IN 
    (SELECT CustomerId FROM orders);

 

196.刪除重複的電子郵箱

DELETE p1.Email FROM Person p1, Person p2 WHERE p1.Email = p2.Email AND p1.Id > p2.Id;

 

 

197.上升的溫度

SELECT w1.Id FROM Weather w1 INNER JOIN Weather w2 
DATEDIFF(day,w1.RecordDate,w2.RecordDate) = 1 
WHERE w1.Temperature < w2.Temperature;

這裏的DATEDIFF有個坑

Mysql中DATEDIFF用法:

SELECT DATEDIFF('2008-12-29','2008-12-30') AS DiffDate;   
// 結果爲-1,第一個參數是結束時間,第二個參數是開始時間

TIMESTAMPDIFF用法:

SELECT TIMESTAMPDIFF(DAY,'2008-12-29','2008-12-30') AS DiffDate;
 //結果爲1,第一個爲開始時間,第二個爲結束時間

在使用在線AlaSQL內存型數據庫測試的時候

SELECT DATEDIFF('2008-12-29','2008-12-30') AS DiffDate; 
// 結果爲1,同樣的語法在不同的數據庫結果不同。

 

 

595.大的國家

SELECT Name, Population, Area FROM World WHERE Area > 3000000 OR Population > 25000000;

 

 

596.超過5名學生的課

SELECT class FROM courses GROUP BY class having COUNT(DISTINCT student)>=5;

DISTINCT用法:

  1. distinct一般是用來去除查詢結果中的重複記錄的,只能用在select語句中
  2. 對多列操作時,必須放到所有字段前面(否則報錯),作用範圍是其後面所有字段
  3. 不過濾Null

 

 

620.有趣的電影

SELECT *  FROM cinema    WHERE description != "boring" AND mod(id, 2)=1 ORDER BY rating DESC;

 

 

627.交換工資

UPDATE salary SET sex= CASE WHEN sex='m' THEN 'f' WHEN sex='f' THEN 'm' ELSE NULL END;

CASE WHEN THEN ELSE END

 

1179.重新格式化部門表

SELECT id, SUM(CASE `month` WHEN 'Jan' THEN revenue END) Jan_Revenue, 
SUM(CASE `month` WHEN 'Feb' THEN revenue END) Feb_Revenue, 
SUM(CASE `month` WHEN 'Mar' THEN revenue END) Mar_Revenue, 
SUM(CASE `month` WHEN 'Apr' THEN revenue END) Apr_Revenue, 
SUM(CASE `month` WHEN 'May' THEN revenue END) May_Revenue, 
SUM(CASE `month` WHEN 'Jun' THEN revenue END) Jun_Revenue, 
SUM(CASE `month` WHEN 'Jul' THEN revenue END) Jul_Revenue, 
SUM(CASE `month` WHEN 'Aug' THEN revenue END) Aug_Revenue, 
SUM(CASE `month` WHEN 'Sep' THEN revenue END) Sep_Revenue, 
SUM(CASE `month` WHEN 'Oct' THEN revenue END) Oct_Revenue, 
SUM(CASE `month` WHEN 'Nov' THEN revenue END) Nov_Revenue, 
SUM(CASE `month` WHEN 'Dec' THEN revenue END) Dec_Revenue FROM Department 
GROUP BY id;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章