刷完了Leetcode SQL Hard Level的28道題:歡迎領取參考答案

在Hohow開設的<入門數據分析,掌握HiveSQL取數能力>的課程已經逐漸有一些同學上完了15章,想說可以再增加點題目給學員練習,不如就從Leetcode挑幾道有趣的題目吧,結果寫著寫著就把Hard Level題目刷完了…

對於Leeetcode其實既熟悉又陌生,熟悉的是Leetcode已經是很多公司面試coding interview的題目;陌生的是我入行比較早,所以曾經有逛過但一直沒有認真刷題過。

如果你有興趣的話,我把28道題的參考答案都寫成了電子書,文末獲得領取方式!

1、很考驗綜合應用

基本90%的題目都需要window function,各種函數處理跟多表的處理也是基本款,所以語法要滿熟悉的,也包含語法的使用細節。例如<1194.Tournament Winners>,如果是用UNION而不是UNION ALL就無法求得正確答案。

但語法熟悉以外,但更大的困難是綜合運用的思考。

像是題目只有一張表,但要求解則需要對該表拆分成多張子表(例如618.Students Report By Geography)。有些題目甚至需要用不等於的JOIN關聯才能解(例如像是1635. Hopper Company Queries I)

另外像<1892.Page Recommendations II>、<1917.Leetcodify Friends Recommendations>、<1919.Leetcodify Similar Friends> 這幾道推薦題則是有自己JOIN自己的方式。

解hard真的是腦袋反應問題,有寫題目也是想了十幾分鐘才想到一些解題思路。

2、為了困難而困難(部分題)

有些題目可能為了考驗思考,所以在我看來題目提供的表結構有點奇怪,例如不等式的JOIN的用法其實很少用的,在Hive中一般也不允許這種笛卡兒積的操作。

在現實中有更多的表、或是可以拿到更底層的數據,我可以根據想要的分析結果,在中間過程先處理成好用的中間表,而不需要用題目提供的這種不合適的表結構繼續往下操作。

另外<2004.The Number of Seniors and Juniors to Join the Company>,題型是在一限制條件下求某種策略的解,這種問題很複雜的…如果不是題目限制SQL,選用R/python處理會更方便…

3、商業邏輯不make sense(部分題)

這邊要說一下<601.Human Traffic of Stadium>,題目其實滿好的,是求連續問題,但要求的卻是連續的主鍵id,我就不理解了這道題的id只是一個標示而已,返回這結果要幹嘛?毫無商業意義啊。如果改為連續N天登入用戶、用戶最長連續登入天數的問題,那就可以跟用戶活躍、用戶流失的商業場景結合了。

還有<1369.Get The Second Most Recent Activity>,題目要求頻率第二頻繁的活動,但工作中我們更常關注最大,最近、最小、最遠之類的 ,也就是第一(或倒數第一),什麼商業場景下要求第二高?思考了下也沒啥印象

4、最後

整體來說我還是相當推薦的,難度剛好覆蓋完我Hive課程的難度,並且又需要靈活的思維。

面試的話,其實滿常會考SQL,至於對面試有幫助嗎?我覺得有,但不是必須。如前面所說,有些題目是為了困難而困難,面試難題中最經典的題目,就是連續問題了,也就是窗口函數、次難高頻我覺得是jason解析,涉及知識是解析函數跟一些本文清洗函數、表結構轉換(行列互轉)。

Hard題比這還難,所以練習到medium我想就足夠了。

如果你有興趣或是想挑戰看看的話,我把28道題的參考答案都寫到 <Hand On Leetcode Database Solution with Hive SQL> 這本電子書,關注Rock Data粉絲頁/IG,發送message “leetcode" 獲取電子書連結。

對「刷完了Leetcode SQL Hard Level的28道題:歡迎領取參考答案」的一則回應

  1. 1369.Get The Second Most Recent Activity – 商業上第一名通常沒什麼價值,主因是很可能點擊欺詐或者其他無法 upsale 的行為(例如:activity 填 na / NA / none)。

    Liked by 1 person

    1. Hello Mingchin,
      感謝您的留言。
      您提出的這些場景我確實忽略了!我思考了下…從這角度我是完全同意。
      但我的想法是,這情況是不是應該要從數據質量或其他技術手段來解決/避免的?如果因為這幾種原因,變成第二名才是有商業價值,我總覺得反了..

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.