全文共4028字,預計學習時長11分鐘
圖源:samsar
SQ是一種數據庫查詢和程式設計語言,用於存取數據以及查詢、更新和管理關係數據庫系統,其功能非常強大,是數據科學麪試中繞不過的考點。
很多人爲了通過面試事無鉅細地準備,犄角旮旯都不敢放過。但事實上,在現實面試中大多數公司只測試其少數核心概念。努力學習不如機智學習,以下這10個概念因其在實際中應用最多而最常出現。在準備面試時,你應該主要關注這些概念。
1. CASE WHEN
許多問題都可能需要使用CASE-WHEN語句,因爲這個概念功能非常多。
在根據其他變數分配某個值或類時,我們需要用CASE-WHEN可以編寫複雜的條件語句。但還有一個功能鮮爲人知,它可以用來透視數據。例如,如果你已有「月(month)」列,又希望爲每個month建立一個單獨的列,則可以使用CASE WHEN語句來透視數據。
圖源:unsplash
範例問題:編寫一個SQL查詢重新排列表樣式,以使每個月對應一個收入欄。
Initial table:
+------+---------+-------+
| id | revenue | month |
+------+---------+-------+
| 1 | 8000 | Jan |
| 2 | 9000 | Jan |
| 3 | 10000 | Feb |
| 1 | 7000 | Feb |
| 1 | 6000 | Mar |
+------+---------+-------+
Result table:
+------+-------------+-------------+-------------+-----+-----------+
| id | Jan_Revenue | Feb_Revenue |Mar_Revenue | ... | Dec_Revenue |
+------+-------------+-------------+-------------+-----+-----------+
| 1 | 8000 | 7000 | 6000 |... | null |
| 2 | 9000 | null | null | ... | null |
| 3 | null | 10000 | null | ... | null |
+------+-------------+-------------+-------------+-----+-----------+
2. SELECT DISTINCT
SELECT DISTINCT語句是一定要記牢的,將SELECT DISTINCT語句與聚合函數(即第三個概念)一起使用非常常見。例如,如果你有一個客戶訂單的數據表,則可能會被要求計算每個客戶的平均訂單數。在本例中,需要計算訂單的總數除以客戶的總數。像這樣:
SELECT
COUNT(order_id) / COUNT(DISTINCTcustomer_id) as orders_per_cust
FROM
customer_orders
3. 聚合函數
聚合函數跟上一點聯繫緊密,你需要對這類函數的功能有深刻理解,比如min,max,sum,count等等……你應該好好理解GROUP BY和HAVING子句。我強烈建議你花點時間去解決實際問題,我們在一些創造性的方法中常常會用到聚合函數。
範例問題:編寫一個SQL查詢,在名爲Person的表中找出所有重複的電子郵件。
+----+---------+
| Id | Email |
+----+---------+
| 1 | [email protected] |
| 2 | [email protected] |
| 3 | [email protected] |
+----+---------+ANSWER:
SELECT
Email
FROM
Person
GROUP BY
Email
HAVING
count(Email) > 1
4. 左連線 vs 內連線
對於那些對SQL比較陌生,或有一段時間沒有使用過SQL的人來說,混淆左連線和內連線是件輕而易舉的事兒。請確保你能清楚理解每個連線如何獲得不同的結果,許多面試問題會要求你做一些連線。在某些情況下,選擇了一個而非另一個,即是成敗兩條路。
5. 自連線
圖源:unsplash
SQL自連線指的是將表與其自身連線,它聽上去用處不大,但實際上用處十分廣泛。在許多實際應用中,數據儲存在一個大表中,而不是許多小表中,我們需要自連線來解決特定的問題。
範例問題:給定下面 下麪的Employee表,編寫一個SQL查詢,找出收入高於經理的員工。在表中,喬(Joe)是唯一收入高於經理的員工。
+----+-------+--------+-----------+
| Id | Name | Salary | ManagerId |
+----+-------+--------+-----------+
| 1 | Joe | 70000 | 3 |
| 2 | Henry | 80000 | 4 |
| 3 | Sam | 60000 | NULL |
| 4 | Max | 90000 | NULL |
+----+-------+--------+-----------+Answer:
SELECT
a.Name as Employee
FROM
Employee as a
JOIN Employee as b on a.ManagerID= b.Id
WHERE a.Salary > b.Salary
6. 子查詢
子查詢也稱爲內部查詢或巢狀查詢,是查詢內查詢,會被嵌入到WHERE子句中,可以解決需要多次按序查詢以生成給定結果的特殊問題。子查詢和WITH AS語句在查詢中的使用次數都非常多,因而必須掌握。
範例問題:假設一個網站包含兩個數據表,Customers表和Orders表。編寫一個SQL查詢來找出所有從未訂購過的客戶。
Table: Customers.+----+-------+
| Id | Name |
+----+-------+
| 1 | Joe |
| 2 | Henry |
| 3 | Sam |
| 4 | Max |
+----+-------+Table: Orders.
+----+------------+
| Id | CustomerId |
+----+------------+
| 1 | 3 |
| 2 | 1 |
+----+------------+Answer:
SELECT
Name as Customers
FROM
Customers
WHERE
Id NOT IN (
SELECT
CustomerId
FROM Orders
)
7. 字串格式化
字串函數非常重要,尤其是在處理不清晰的數據時。公司很可能會考察你字串的格式化和處理,以確保你懂得如何處理數據。
字串格式化包括以下內容:
· LEFT, RIGHT
· TRIM
· POSITION
· SUBSTR
· CONCAT
· UPPER, LOWER
· COALESCE
8. 日期時間處理
圖源:unsplash
你肯定會遇到一些涉及日期和時間數據的SQL問題,也許是需要按月份對數據分組,或者將變數格式從DD-MM-YYYY轉換爲簡單的月份。
須知的函數:
· EXTRACT
· DATEDIFF
範例問題:給定一個Weather表,編寫一個SQL查詢以找出所有高於之前(昨天)溫度的日期Id。
+---------+------------------+------------------+
| Id(INT) | RecordDate(DATE) | Temperature(INT) |
+---------+------------------+------------------+
| 1 | 2015-01-01 | 10 |
| 2 | 2015-01-02 | 25 |
| 3 | 2015-01-03 | 20 |
| 4 | 2015-01-04 | 30 |
+---------+------------------+------------------+Answer:
SELECT
a.Id
FROM
Weather a,
Weather b
WHERE
a.Temperature > b.Temperature
AND DATEDIFF(a.RecordDate,b.RecordDate) = 1
9. 視窗函數
視窗函數使你能對所有行執行聚合值,而不是隻返回一行(這是GROUP BY語句的用處),這對於行排序、計算累計等需求來說十分有用。
範例問題:編寫一個查詢以獲取薪水最高的empno,確保解決方案可以處理關係。
depname | empno | salary |
-----------+-------+--------+
develop | 11 | 5200 |
develop | 7 | 4200 |
develop | 9 | 4500 |
develop | 8 | 6000 |
develop | 10 | 5200 |
personnel | 5 | 3500 |
personnel | 2 | 3900 |
sales | 3 | 4800 |
sales | 1 | 5000 |
sales | 4 | 4800 |Answer:
WITH sal_rank AS
(SELECT
empno,
RANK() OVER(ORDER BY salary DESC) rnk
FROM
salaries)
SELECT
empno
FROM
sal_rank
WHERE
rnk = 1;
10. UNION
UNION不常出現,但偶爾也會有人問到這點,以防萬一還是要瞭解一下。如果你有兩個含有相同列的表,又希望將它們組合在一起,這時UNION就可以派上用場啦。如果你不能百分百確定如何操作它,請及時善用搜尋引擎解決它。
圖源:macrovector
掌握這個10個概念,面試中的大部分問題你都將迎刃而解。祝你面試順利!
一起分享AI學習與發展的乾貨
歡迎關注全平臺AI垂類自媒體 「讀芯術」
(新增小編微信:dxsxbb,加入讀者圈,一起討論最新鮮的人工智慧科技哦~)