33个必须知道的数据分析师SQL面试问题和答案
33個必須知道的數據分析師SQL面試問題和答案
SQL是一種強大的編程語言,被廣泛用于管理和分析數據。如果你想成為一名數據分析師,或者是正在尋找新工作的現有分析師,準備好回答SQL面試問題是很重要的。
下面是一些最常見的SQL面試問題,在我們的數據分析師SQL面試中,你可能會被問到這些問題,以及如何回答的建議。
SQL,即結構化查詢語言,是一種用于訪問和操作數據庫的標準編程語言。SQL以其簡單而強大的語法而聞名,這使得它可以很容易地以各種方式查詢數據。SQL還支持廣泛的數據類型,包括數字、文本和日期/時間值。
一些最常見的SQL命令是CREATE TABLE, INSERT INTO, UPDATE, DELETE, 和SELECT。
CREATE TABLE是用來在數據庫中創建一個新的表。
INSERT INTO用于向一個表插入數據。
UPDATE用于更新表中的數據。
DELETE用于從一個表中刪除數據。
SELECT用于從表中選擇數據。
想練習真正的SQL面試問題嗎?
我們在Big Tech Interviews (BTI)分析了從上市前到財富500強公司的50,000多次面試,策劃了一個最新的SQL面試問題和解決方案的獨家列表,這樣你就可以在下一次面試中取得勝利
SQL提供了許多內置函數,可用于執行各種類型的數據分析。例如,COUNT函數可以用來計算一個表中的記錄數,而SUM函數可以用來計算一個列中數值的總和。通過使用這些和其他SQL函數,數據分析員可以快速和容易地執行復雜的數據分析任務。
例如,一個數據分析員可能會使用SQL來計算每天在一個網站上的訂單數量。下面的SQL查詢將返回數據集中每天的訂單總數。
SELECT?COUNT(*)?AS?"Total?Orders"?#(訂單總數)FROM?orders??#訂單
GROUP?BY?order_date
編寫SQL查詢時發生的一個常見錯誤是忘記了包括WHERE子句。如果沒有WHERE子句,你的查詢將返回你所查詢的表的所有記錄,這可能會使你很難找到你所尋找的具體信息。另一個常見的錯誤是使用不正確的語法,這可能導致你的查詢在執行時出現意外的結果或錯誤。最后,重要的是要確保你的SQL查詢格式正確,易于閱讀;否則,如果出現問題,其他人可能很難理解或調試。
例如,下面的SQL查詢將返回訂單表中的所有記錄,無論訂單日期如何。
SELECT?*FROM?orders
這將返回一個非常大的數據集,難以處理。為了解決這個問題,我們可以添加一個WHERE子句,按訂單日期過濾數據。
SELECT?*FROM?orders
WHERE?order_date?=?'2018-01-01'?。
一個主鍵是數據庫表中的一個列(或一組列),它能唯一地識別表中的每一行。外鍵是一個表中的一個列(或一組列),它包含與另一個表中的主鍵值相匹配的值。外鍵用于創建表之間的關系;例如,"客戶 "表中的外鍵可以引用 "訂單 "表中的主鍵,將每個客戶與他們各自的訂單聯系起來。
SQL連接是用來將兩個或多個表的數據合并成一個結果集的。連接是使用JOIN關鍵字進行的,后面是要連接的表的名稱。有許多不同類型的連接,包括內連接、外連接和自連接。
內連接從兩個表中返回在指定列中有匹配值的記錄,而外連接從兩個表中返回所有記錄,包括沒有匹配值的記錄。自連接用于將一個表連接到它自己;例如,你可以使用自連接來找到與另一個客戶住在同一個城市的所有客戶。
子查詢是一個嵌入在另一個SQL查詢中的SQL查詢。子查詢通常用于查找滿足某些條件的數據;例如,你可以使用子查詢來查找與某一特定客戶居住在同一城市的所有客戶。子查詢可以與各種SQL命令一起使用,包括SELECT, FROM, WHERE, 和ORDER BY。
例如,考慮下面這個客戶表。 假設我們想找到與id=1的客戶住在同一個城市的所有客戶。我們可以使用下面的SQL查詢。
SELECT?*?FROM?customers?WHERE?city?IN?(SELECT?city?FROM?customers?WHERE?id?=?1)這將返回客戶表中的所有行,包括id=1的行。為了排除這條記錄,我們可以在子查詢中添加一個條件,檢查customer_id !=1。
SELECT?*?FROM?customers?WHERE?city?IN?(SELECT?city?FROM?customers?WHERE?id?=?1?AND?id?!=?1)
一個SQL窗口函數是一個對一組數值進行計算并返回一個單一數值的函數。與聚合函數不同的是,窗口函數每組返回一個結果,每行返回一個結果。常見的窗口函數包括RANK, DENSE_RANK, 和NTILE。
窗口函數經常與ORDER BY子句一起使用,為每一行計算一個值。
SQL支持許多不同的數據類型,包括數字、文本、日期/時間和布爾值。數字值包括整數和浮點數,而文本值包括字符串,日期/時間值包括日期、時間和時間戳值。布爾值可以是TRUE或FALSE。
索引是一種數據庫結構,用于提高SQL查詢的性能。索引可以在表中的列上創建,它們通常被用來加快對這些列中特定值的搜索。當一個查詢被執行時,數據庫引擎將首先檢查被搜索的列是否存在索引;如果存在索引,引擎將使用索引來快速定位所需的數據,這可以提高查詢性能。
視圖是一個基于SQL查詢結果的虛擬表。視圖通常被用來提供安全性或簡化復雜的查詢。例如,你可以創建一個視圖,只包括與你當前項目相關的客戶信息。另一方面,表則是實際存儲數據的數據庫結構。
WHERE子句用于根據指定的條件從表中過濾行;例如,你可以使用WHERE子句來尋找所有居住在某一城市的客戶。HAVING子句用于根據聚合值從表中過濾行;例如,你可以使用HAVING子句來查找所有下過10個以上訂單的客戶。
ORDER BY關鍵字用于將SQL查詢的結果按升序或降序排序。默認情況下,ORDER BY將對結果進行升序排序;要對結果進行降序排序,可以使用DESC關鍵字。
什么是主鍵? 主鍵是一個列或一組列,用于唯一地識別表中的一行。主鍵必須包含唯一的值,而且不能是空的。
什么是外鍵? 外鍵是一個列或一組列,包含與另一個表中的主鍵值相匹配的值。外鍵用于創建表之間的關系;例如,"客戶 "表中的外鍵可以引用 "訂單 "表中的主鍵,將每個客戶與他們各自的訂單聯系起來。
窗口函數是如何工作的?
窗口函數是一種SQL函數,對一組行進行操作并返回一個單一的值。窗口函數通常用于計算匯總值,如總和或平均數,在一個指定的窗口行上計算。例如,你可以使用一個窗口函數來計算每個客戶的平均訂單總額。
內聯只返回在兩個表中都有匹配值的行;例如,如果你將 "客戶"表和 "訂單"表進行內聯,將只返回已下訂單的客戶。另一方面,外連接會返回兩個表中的所有行,包括沒有匹配值的行。
一些最常見的SQL函數是SUM(), AVG(), COUNT(), MIN(), MAX()。這些函數用于計算聚合值,如總和、平均數或計數。
這是一個常見的SQL面試問題,目的是評估你在現實世界中使用該語言的經驗。在回答這個問題時,一定要描述一個你能用SQL解決的具體問題。這將有助于向面試官表明,你對SQL在實踐中的使用有很好的理解。
滯后和領先函數是用來訪問表中前一行或后一行的數據的。滯后函數從當前行之前的行中返回數據,而領先函數從當前行之后的行中返回數據。
比如說。
如果當前行是customer_id 3 (Joe Bloggs),滯后函數將返回customer_id 2 (Jane Doe),而引導函數將返回customer_id 4 (Sarah Connor)。
SELECT?DISTINCT?salary
FROM??employee?#雇員
WHERE?department?=?'engineering'?#(工程部)
ORDER?BY?salary?DESC?LIMIT?1?OFFSET?1
這個SQL查詢將從工程部選擇第二高的工資,首先選擇工程部員工的所有不同的工資,然后按降序排序,最后選擇前兩個工資。
相關子查詢是一種SQL查詢,它包含對外部查詢的一個值的引用。當你想從一個表中找到符合某些條件的行時,通常會使用相關子查詢,但你只能在檢查同一表中的其他行后才能知道這些條件。
例如,你可以使用相關子查詢來找到所有賺取超過其部門平均工資的員工。在這種情況下,你需要先計算出每個部門的平均工資,然后再將每個員工的工資與之進行比較。
一個SQL聚合函數是一個對一組數值進行計算并返回一個單一數值的函數。常見的聚合函數包括COUNT, SUM, MAX, 和MIN。聚合函數通常與GROUP BY子句一起使用,以便為每個組返回一個結果;例如,你可以使用COUNT()函數來查找每個城市的客戶數量。
例如,考慮下面這個客戶表。
假設我們想找到每個城市的客戶數量。我們可以使用下面的SQL查詢。
SELECT?city,?COUNT(*)?AS?"Number?of?Customers"FROM?Customers
GROUP?BY?city
這將返回以下結果。
窗口函數是一種SQL函數,它根據同一結果中其他行的值,為查詢結果中的每一行返回一個值。例如,你可以使用一個窗口函數來計算客戶訂單表中所有訂單總數的流水。
窗口函數通常不與聚合函數一起使用,因為其結果是沒有意義的。例如,如果你試圖用窗口函數找出每個部門的平均工資,你最終會得到每個部門相同的平均工資,因為窗口函數會計算結果集中每一行的平均工資(也就是所有部門的所有員工)。
有幾種方法可以在SQL表中找到重復的行。一種方法是使用GROUP BY子句將在你感興趣的列中具有相同值的記錄分組。例如,假設我們有一個客戶訂單表,其數據如下。
如果我們想找到所有重復的行,我們可以使用下面的SQL查詢。
SELECT?name,?cityFROM?customer_orders
GROUP?BY?name,?city
HAVING?COUNT(*)?>?1
這將返回以下結果。
有幾種不同的方法來優化一個SQL查詢。一種方法是確保你感興趣的列是有索引的,所以數據庫可以更快找到你要找的數據。
另一種方法是使用EXPLAIN命令來查看數據庫將如何執行你的查詢,然后根據這些信息對你的查詢進行修改。最后,你可以使用查詢提示來給出數據庫特定的指令,說明如何執行你的查詢。
另一種優化SQL查詢的方法是使用像SQL Profiler這樣的工具來查看查詢中的瓶頸所在,然后做出相應的修改。
如果我們想按銷售額找到前5名客戶,我們可以使用以下SQL查詢。
SELECT?name,?city,?SUM(sales)?AS?"Total?Sales"?(總銷售額)。
FROM?customer_orders
GROUP?BY?name,?city
ORDER?BY?"Total?Sales"?DESC
LIMIT?5
這將返回以下結果。
關系型數據庫是一種將數據存儲在表中的數據庫。表類似于文件系統中的文件夾,每張表都存儲著關于一個特定主題的數據。例如,客戶訂單表可能存儲有關客戶訂單的數據,而產品表可能存儲有關產品的數據。
關系型數據庫是最常見的數據庫類型,它們被大多數企業使用,因為它們易于使用,易于擴展。
數據庫中有三種類型的關系:一對一,一對多和多對多。
一對一關系是指一個表中的每條記錄只與另一個表中的一條記錄相關。例如,一個客戶表可能與一個訂單表有一對一的關系,每個客戶只與一個訂單有關。
一對多的關系是指一個表中的每條記錄與另一個表中的多條記錄有關。例如,一個客戶表可能與一個訂單表有一對多的關系,每個客戶與多個訂單有關。
多對多的關系是指一個表中的每條記錄與另一個表中的多條記錄相關,而另一個表中的每條記錄與第一個表中的多條記錄相關。例如,一個客戶表可能與一個產品表有多對多的關系,其中每個客戶與多個產品相關,每個產品與多個客戶相關。
DDL(數據定義語言)是一種用于創建和修改數據庫結構的語言,如表、視圖和索引。
如果我們想得到按日計算的兩天滾動平均數,我們可以使用下面的SQL查詢。
SELECT?date,?sales,?AVG(sales)?OVER?(ORDER?BY?date?ROWS?BETWEEN?1?PRECEDING?AND?1?FOLLOWING)?AS?“Two-Day?Rolling?Average”#"兩天滾動平均數":?Two-Day?Rolling?Average
FROM?sales
GROUP?BY?date
ORDER?BY?date
#按日期排序
這將返回以下結果。
如果你向一個初學者教授SQL,你會從解釋數據庫的基礎知識開始,以及它們是如何用來存儲數據的。
然后,你會繼續解釋不同類型的SQL查詢,以及它們是如何被用來從數據庫中檢索數據的。最后,你會教他們如何使用SQL來插入、更新和刪除數據庫中的數據。
在SQL中一些常見的日期函數是。
CURRENT_DATE:返回當前日期。
current_tim:返回當前的時間。
current_timestamp:返回當前的日期和時間。
DATE_ADD: 將指定的天數、月數或年數加到一個日期上。
DATE_SUB:從一個日期中減去指定的天數、月數或年數。
DAY:返回一個日期的月日。返回一個給定日期的月份的日期。
MONTH:返回給定日期的月份。
YEAR:返回給定日期的年份。返回給定日期的年份。
有許多高級SQL函數,但其中最常見的是聚合函數、窗口函數和透視。
聚合函數是用來從多個數值中計算一個單一的數值。例如,SUM()函數計算一列數值的總和,AVG()函數計算一列數值的平均值。
窗口函數用于根據表中其他行的值為每一行計算出一個值。例如,RANK()函數給表中的每一行分配一個等級,LAG()函數返回前一行中某一列的值。
透視是指你將數據從一種格式旋轉到另一種格式。例如,你可以將數據從水平格式旋轉到垂直格式,或者從列式格式旋轉到基于行的格式。
用這33個數據分析師的SQL問題搞定你的數據分析師面試 你的數據分析師SQL面試將明確和隱含地測試你的這些概念。僅僅知道在數據分析師面試中出現的SQL查詢是不夠的;你需要了解這個主題如何融入數據分析以及它對你即將到來的同事的影響。首先,對這些概念和查詢的背景和功能感到滿意。然后你就可以進入下一步:練習解決問題。
本文由 mdnice 多平臺發布
總結
以上是生活随笔為你收集整理的33个必须知道的数据分析师SQL面试问题和答案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win10python3.9安装pyco
- 下一篇: linux cmake编译源码,linu