想通過數據科學麪試,這十個SQL概念你必須掌握

2020-08-11 17:05:57

全文共4028字,預計學習時長11分鐘

 

想通过数据科学面试,这十个SQL概念你必须掌握

圖源:samsar

 

SQ是一種數據庫查詢和程式設計語言,用於存取數據以及查詢、更新和管理關係數據庫系統,其功能非常強大,是數據科學麪試中繞不過的考點。

 

很多人爲了通過面試事無鉅細地準備,犄角旮旯都不敢放過。但事實上,在現實面試中大多數公司只測試其少數核心概念。努力學習不如機智學習,以下這10個概念因其在實際中應用最多而最常出現。在準備面試時,你應該主要關注這些概念。

 

1. CASE WHEN

 

許多問題都可能需要使用CASE-WHEN語句,因爲這個概念功能非常多。

 

在根據其他變數分配某個值或類時,我們需要用CASE-WHEN可以編寫複雜的條件語句。但還有一個功能鮮爲人知,它可以用來透視數據。例如,如果你已有「月(month)」列,又希望爲每個month建立一個單獨的列,則可以使用CASE WHEN語句來透視數據。

 

想通过数据科学面试,这十个SQL概念你必须掌握

圖源: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. 自連線

 

想通过数据科学面试,这十个SQL概念你必须掌握

 

圖源: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. 日期時間處理

 

想通过数据科学面试,这十个SQL概念你必须掌握

圖源: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就可以派上用場啦。如果你不能百分百確定如何操作它,請及時善用搜尋引擎解決它。

 

想通过数据科学面试,这十个SQL概念你必须掌握

圖源:macrovector

 

掌握這個10個概念,面試中的大部分問題你都將迎刃而解。祝你面試順利!

 

想通过数据科学面试,这十个SQL概念你必须掌握

一起分享AI學習與發展的乾貨

歡迎關注全平臺AI垂類自媒體 「讀芯術」

(新增小編微信:dxsxbb,加入讀者圈,一起討論最新鮮的人工智慧科技哦~)