亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SQL面試的技巧和陷阱有哪些

發布時間:2022-01-07 14:29:09 來源:億速云 閱讀:371 作者:iii 欄目:數據庫

本篇內容介紹了“SQL面試的技巧和陷阱有哪些”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

提問

要拿下一場SQL面試,最重要的在于盡可能多地提問,以確保自己掌握了給定任務和數據樣本的所有細節。理解這些需求有助于節省迭代問題的時間,也有助于更好地處理邊緣情況。

許多應聘者會在沒有深入理解SQL問題或數據集之前,直接開始解決問題。在筆者指出解決方案中的問題之后,他們不得不反復修改查詢,在迭代上浪費了大量時間,甚至到最后都沒找到正確的解決方案。

筆者的建議是將SQL面試視為在與業務合作伙伴一起工作,保持這種心態,面試者就會在提供解決方案之前努力收集數據請求的所有需求。

示例

從下表中找出薪資最高的三位職員。

SQL面試的技巧和陷阱有哪些

樣本:職員薪資表

面試者應該讓面試官仔細闡述“前三名”的概念——結果中必須只有三名職員嗎?對于并列的處理有何要求?此外,面試者應仔細查看示例職員的數據——薪資字段的數據類型是什么?需要在計算之前清除數據嗎?

何種連接

SQL面試的技巧和陷阱有哪些

在SQL中,連接經常用于組合來自多個表的信息。共有四種不同類型的連接,但是在大多數情況下,我們只使用自然連接、左連接和全連接,因為右連接并不直觀,而且使用左連接很容易重寫。在SQL面試中,面試者需要根據給定問題的特定要求,選擇正確的連接。

示例

找出每位學生上課的總節數。(已知學生證、姓名和上課次數。)

SQL面試的技巧和陷阱有哪些

樣本:學生名單和課程數據表

可以注意到,并非所有出現在課程數據表中的學生都存在于學生名單中,這可能是因為這些學生已經畢業(這在事務數據庫中非常典型,數據不活躍時就會被刪除)。在了解清楚面試官是否希望將不活躍的學生包括在內之后,可以根據情況使用左連接和自然連接兩種方式來合并表格。

WITHclass_count AS (     SELECT student_id, COUNT(*) ASnum_of_class     FROM class_history     GROUP BY student_id ) SELECT     c.student_id,     s.student_name,     c.num_of_class FROM class_count c -- CASE 1: include only active students JOIN student s ON c.student_id = s.student_id-- CASE 2: include all students -- LEFT JOIN student s ON c.student_id = s.student_id

GROUP BY

GROUP  BY是SQL中最基本的函數,廣泛用于數據聚合。如果在一個SQL問題中出現了sum、average、minimum或maximum等關鍵字,則極有可能應該在查詢中使用GROUP  BY。一個常見的陷阱是,在用GROUP BY過濾數據時將WHERE和HAVING混淆——許多人都犯過這個錯誤。

示例

計算每個學生每學年的必修課平均績點,并找出每學期中績點≥3.5的學生。

SQL面試的技巧和陷阱有哪些

樣本:GPA數據表

在計算GPA時只考慮必修課,因此需要使用 WHERE is_required =  TRUE來排除選修課。需要計算每個學生每學年的平均績點,因此需要用GROUP BY命令按student_id 和school_year  兩列來進行分組,并取gpa的平均值。最后,只保留平均GPA高于3.5的行,這可以通過HAVING實現。再將以上所得進行結合:

SELECT     student_id,     school_year,     AVG(gpa) AS avg_gpa FROM gpa_history WHERE is_required = TRUE GROUP BY student_id, school_year HAVING AVG(gpa) >= 3.5

記住,無論何時在查詢中使用GROUP BY,都只能選擇要分組的列,然后進行聚合,因為其他列中的行級信息已被丟棄。

可能有人想知道WHERE和HAVING之間有什么區別,或者想知道為什么不直接用avg_gpa>=  3.5,而是指定函數。下一節將會給出詳細解釋。

SQL查詢語句執行順序

在寫SQL查詢時,大多數人是按照自上而下的順序,但他們可能并不知道SELECT是SQL引擎最后執行的函數之一。以下是SQL查詢的執行順序:

  1. 鴻蒙官方戰略合作共建——HarmonyOS技術社區

  2. FROM, JOIN

  3. WHERE

  4. GROUP BY

  5. HAVING

  6. SELECT

  7. DISTINCT

  8. ORDER BY

  9. LIMIT, OFFSET

回頭再看前面的示例。因為需要在計算平均績點之前過濾掉選修課,所以可以用 WHERE is_required =  TRUE來代替HAVING,因為WHERE在GROUP BY和HAVING之前執行。不用HAVINGavg_gpa >=  3.5的原因是avg_gpa被定義為SELECT的一部分,所以不能在SELECT之前執行的步驟中引用。

SQL面試的技巧和陷阱有哪些

圖源:unsplash

筆者建議在編寫查詢時按照執行順序編寫,這在編寫復雜查詢時非常有用。

窗口函數

窗口函數也經常出現在SQL面試中。五種常見的窗口函數如下:

  • RANK /DENSE_RANK  /ROW_NUMBER:通過對特定列排序,為每行分配一個秩。如果給定了任何分區列,則行將在其所屬的分區組中排列。

  • LAG /LEAD:根據指定的順序和分區組從前一行或后一行檢索列值。

在SQL面試中,面試者必須知道排名函數之間的差異,以及何時使用LAG/LEAD。

示例

找出每個部門中薪資最高的3名職員。

SQL面試的技巧和陷阱有哪些

樣本:職員薪資表2

當SQL問題要求找出“前N名”時,可以使用ORDER BY或ranking函數來回答。但以上示例要求計算“每個Y中的前N  個X”,這代表著面試者應該使用排ranking函數,因為需要對每個分區組中的行進行排列。

下面的查詢能準確找到3名薪資最高的職員,不考慮并列:

WITH TAS ( SELECT     *,     ROW_NUMBER() OVER (PARTITION BYdepartment_id ORDER BY employee_salary DESC) AS rank_in_dep FROM employee_salary) SELECT * FROM T WHERE rank_in_dep <= 3-- Note: When using ROW_NUMBER, each row will have aunique rank number and ranks for tied records are assigned randomly. Forexmaple, Rimsha and Tiah may be rank 2 or 3 in different query runs.

另外,根據面試官對并列情況處理的要求,面試者也可選擇不同的ranking函數。再次提醒大家,細節很重要!

SQL面試的技巧和陷阱有哪些

ROW_NUMBER、RANK和 DENSE_RANK 三種函數的對比。

重復項

SQL面試中的另一個常見陷阱是忽略重復項。盡管有些列在示例數據中似乎具有不同的值,但面試者還是應該考慮所有可能的情況,就像在處理真實的數據集一樣。例如,在上例的員工薪資表中,不同職員可能出現同名情況。

想要避免重復項引起的潛在問題,一個簡單的方法是始終使用ID列來標識不同的記錄,避免重復。

示例

根據職員薪資表,找出所有部門每個職員的總工資。

正確的解決方案是按employee_id  來分組,使用SUM(employee_salary)來計算總薪資。如果需要員工姓名,可在末尾加入職員表格來檢索職員的姓名信息。

用employee_name來分組是錯誤的。

NULL

在SQL中,任何謂詞都可能產生以下三個值之一:true、false和NULL。NULL這一關鍵詞用于指代未知或空缺數據。處理NULL可能會非常棘手。在SQL面試中,面試官會特別注意面試者在解決過程中是否處理了NULL。在一些情況下,很明顯某列數據不能為空值(例如ID列),但大多數其他的列很可能會出現NULL。

筆者建議面試者確認示例數據中的關鍵列是否可以為空值,如果可以,則可以使用IS (NOT) NULL、IFNULL和COALESCE  等函數來覆蓋這些邊緣情況。

溝通

另外很重要的一點在于&mdash;&mdash;在面試過程中保證流暢的溝通。

在筆者面試過的求職者中的很多人,除非真的有問題,否則幾乎不說話。如果他們能在最后給出完美的解決方案,那倒也沒什么大問題,但在技術面試中保持與面試者的溝通通常會有所助益。例如,面試者可以談論自己對問題和數據的理解、自己是如何計劃解決問題的、使用這個函數而不是另外一個的原因、或者正在考慮的邊緣情況。

“SQL面試的技巧和陷阱有哪些”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

sql
AI

永城市| 宁波市| 徐水县| 辉南县| 大余县| 都匀市| 商丘市| 东乡族自治县| 甘肃省| 资中县| 介休市| 昭平县| 宜兰县| 岱山县| 聂荣县| 秦皇岛市| 安溪县| 无极县| 杭锦后旗| 玉树县| 时尚| 宜川县| 疏勒县| 清水河县| 阳原县| 金秀| 钦州市| 华安县| 林州市| 遵化市| 武隆县| 湖口县| 靖江市| 阿克陶县| 兴宁市| 抚松县| 长顺县| 阜宁县| 石泉县| 邯郸县| 来凤县|