SQL 挑戰,一個讓你彎道超車的關鍵

更新 發佈閱讀 5 分鐘
raw-image
沒有什麼是 SQL 寫不出來的 — By 我工作的第一個主管

變強的關鍵「轉置」

我的第一份工作在開發報表系統,當時我的 SQL 能力是 「select * from table」這種初學者等級,我看同事們都很強實在緊張,於是我帶著敬畏的心去請教直屬主管,看有沒有讓自己進步的好辦法。結果直屬主管跟我說了這句話,霸氣外露的一句話讓我印象極為深刻,請教結束後主管還出了一門作業「SQL 轉置」,並特別交代我說:「你只要把這個技術學會就會變強」。先插個話,可能有蠻多人沒聽過轉置(Transpose),有興趣了解細節的人可以先參考維基百科-轉置矩陣 說明。 「SQL 轉置」簡單說,就是用 SQL 語法把一個資料集合,例如,資料表格(table)、檢視表(view)、子查詢(sub query) 等的「直行轉橫列」或「橫列轉直行」的技巧。我問主管說為什麼學會這招就會變強?主管只是笑笑跟我講,你先回去功課做好再來。可惜這道題目我當時也只解開了前半「直行轉橫列」,另一半實在解不出來,還好直屬主管人不錯,他說我沒經驗能做到這樣算不錯了,隨後給我演示了另一半「橫列轉直行」的技巧,如此神操作讓我驚為天人!這個 SQL 轉置技巧也讓我一路沿用下來,特別是後來的 ETL 改善與檢視表(view) / 預儲程式 (stored procedure) 的設計上。

Pivot 也是一招

現在 SQL 轉置已經有專用的語法了,只要去 google 一下「 sql pivot」 關鍵字就能找到不錯資料,例如這一篇「**[SQL] 使用 PIVOT 扭轉資料,由直列轉為橫向資料」**就有不錯的 Pivot 使用說明。那為什麼會說學會這種 SQL 轉置技巧就會變強呢?因為資料轉置可以讓我們結算好資料一次撈出來效率極佳。我舉個例子給你聽你就懂了,當時我負責的系統有很多 24 小時都在跑的 SQL ETL,在我接手維護的一段時間後,注意到很多 99.9% 相似的 SQL ETL,彼此間唯一的差異就是 Where 的條件帶了一個不同的條件參數,例如:機台 AVA010, AVA020…,所以有多少台設備就有多少 SQL ETL 。我問了前輩為什麼,他回我:「大家都是這樣寫,讓每一隻 SQL 只負責一個控制常數這樣比較簡單」。我說:「可是如果來源表格結構有變,例如欄位改名字,這麼多 SQL 要怎麼處理?」前輩回我:「那就全部一起改,很快!」;我:「那如果有新的參數呢?」前輩:「直接 Copy 其中一隻改一下即可」。你看出問題了嗎?就像是寫程式明明可以寫成函數呼叫,卻硬要用 Ctrl+C, Ctrl+V 一樣糟糕。

看見價值

後來我學會了 SQL 轉置技巧後,嘗試把相似的 16 隻 SQL ETL 整成 1 隻,意外發現速度跟原本差不多但維護成本減少 90% 以上。這給了我很大的信心,隨著我把一兩百隻 SQL ETL 全部整理過到剩下 20 隻左右,我才終於明白了當時直屬主管說的「沒有什麼是寫不出來的」的真正意思,是「一次就能把資料結算好撈出來的真.SQL 功夫」。這種方法在開發管理報表的時候特別有用。橫列轉直行可以用來 group by 統計資料、直行轉橫列可以組合要顯示的欄位,也因為需要在層層的 SQL 中不斷地應用,通常會寫得很長,透過內縮排版來增加可讀性、可維護性也是非常重要的。

順帶一提另一種極端的做法就是用最簡單的「 select * 」把所有的資料 raw data 全部拉出來到網頁伺服器程式端再來計算數據的方式,你知道問題在哪嗎?

  1. 資料庫只發揮了儲存資料的能力,運算能力完全沒用到
  2. 網路上傳輸大量 Raw data 會佔用很大的頻寬會影響到其他生產線的資訊系統,傳輸百萬筆 Raw data 資料跟結算後的千筆資料時間相比天差地遠
  3. 伺服器記憶體不足,必須先準備 RecordSet 來承接這些資料才能開始運算,記憶體一路狂飆,伺服器就會無法回應,使用者體驗極差無比

結語

最後我想說的是,我非常感謝帶我入門的直屬主管與同事們,沒有他們的狂言豪語刺激,我不會有深刻的學習體悟。因為不管學習哪一門技術,最看重的還是追求「真理」的心,一定要先知其然而後要知其所以然,才能做到以一通百千變萬化。好了,接下來換我要出作業給你了:「要請你試試在不用專門的 Pivot 的語法,只用 SQL 語法做出轉置的結果,任何資料庫都可以」,我非常期待你的答案。

留言
avatar-img
Warren Lo的沙龍
30會員
92內容數
WarrenLo's 軟體設計武功祕笈
Warren Lo的沙龍的其他內容
2024/09/25
當我們從事軟體開發工作一段時間後,有些人會開始接觸軟體架構設計。由於每個軟體架構設計者的對問題的理解與知識經驗差異會導出不同的設計架構。近期與同事的軟體設計案例經驗交流後,就很希望自己剛開始學習軟體架構設計的時候就有人能用實際的軟體架構設計經驗來帶我入門...
Thumbnail
2024/09/25
當我們從事軟體開發工作一段時間後,有些人會開始接觸軟體架構設計。由於每個軟體架構設計者的對問題的理解與知識經驗差異會導出不同的設計架構。近期與同事的軟體設計案例經驗交流後,就很希望自己剛開始學習軟體架構設計的時候就有人能用實際的軟體架構設計經驗來帶我入門...
Thumbnail
2024/07/02
如果你也是從事軟體相關工作的人,一定會遭遇突然需要你去學習一套你不熟悉的程式語言狀況吧,此時你會怎麼做呢? 是趕快去買書來看嗎? 還是趕快找一門程式課來上? 又或者乾脆去找會的同事來教學?
Thumbnail
2024/07/02
如果你也是從事軟體相關工作的人,一定會遭遇突然需要你去學習一套你不熟悉的程式語言狀況吧,此時你會怎麼做呢? 是趕快去買書來看嗎? 還是趕快找一門程式課來上? 又或者乾脆去找會的同事來教學?
Thumbnail
2024/04/08
經過這麼多年的觀察與實踐,一個成熟的軟體工程師還需要第四個要素,它是讓決定你通往熟手的重要關鍵沒有之一。
Thumbnail
2024/04/08
經過這麼多年的觀察與實踐,一個成熟的軟體工程師還需要第四個要素,它是讓決定你通往熟手的重要關鍵沒有之一。
Thumbnail
看更多
你可能也想看
Thumbnail
債券投資,不只是高資產族群的遊戲 在傳統的投資觀念中,海外債券(Overseas Bonds)常被貼上「高資產族群專屬」的標籤。過去動輒 1 萬甚至 10 萬美元的最低申購門檻,讓許多想尋求穩定配息的小資族望而卻步。 然而,在股市波動劇烈的環境下,尋求穩定的美元現金流與被動收入成為許多投資人
Thumbnail
債券投資,不只是高資產族群的遊戲 在傳統的投資觀念中,海外債券(Overseas Bonds)常被貼上「高資產族群專屬」的標籤。過去動輒 1 萬甚至 10 萬美元的最低申購門檻,讓許多想尋求穩定配息的小資族望而卻步。 然而,在股市波動劇烈的環境下,尋求穩定的美元現金流與被動收入成為許多投資人
Thumbnail
透過川普的近期債券交易揭露,探討債券作為資產配置中「穩定磐石」的重要性。文章分析降息對債券的潛在影響,以及股神巴菲特的操作策略。並介紹玉山證券「小額債」平臺,如何讓小資族也能低門檻參與海外債券市場,實現「低門檻、低波動、固定收益」的務實投資方式。
Thumbnail
透過川普的近期債券交易揭露,探討債券作為資產配置中「穩定磐石」的重要性。文章分析降息對債券的潛在影響,以及股神巴菲特的操作策略。並介紹玉山證券「小額債」平臺,如何讓小資族也能低門檻參與海外債券市場,實現「低門檻、低波動、固定收益」的務實投資方式。
Thumbnail
解析「債券」如何成為資產配置中的穩定錨,提供低風險高回報的投資選項。 藉由玉山證券的低門檻債券服務,投資者可輕鬆入手,平衡風險並穩定財務。
Thumbnail
解析「債券」如何成為資產配置中的穩定錨,提供低風險高回報的投資選項。 藉由玉山證券的低門檻債券服務,投資者可輕鬆入手,平衡風險並穩定財務。
Thumbnail
相較於波動較大的股票,債券能提供固定現金流,而玉山證券推出的小額債,更以1000 美元的低門檻,讓學生與新手也能參與全球優質企業債投資。玉山E-Trader平台即時報價、條件式篩選與清楚的交易流程等特色,大幅降低投資難度,對於希望分散風險、建立穩定現金流的人來說,玉山小額債是一個值得嘗試的理財起點。
Thumbnail
相較於波動較大的股票,債券能提供固定現金流,而玉山證券推出的小額債,更以1000 美元的低門檻,讓學生與新手也能參與全球優質企業債投資。玉山E-Trader平台即時報價、條件式篩選與清楚的交易流程等特色,大幅降低投資難度,對於希望分散風險、建立穩定現金流的人來說,玉山小額債是一個值得嘗試的理財起點。
Thumbnail
團隊最近因為會議紀錄的表單製作上花了很多時間 決定改善作法讓他效率化一些 經果討論之後決定移到Notion 因為提案的是我所以我就負責實際執行這個移動資料歸檔跟轉換格式的作業 這篇文分享我移資料的時候感覺到的小重點跟心得
Thumbnail
團隊最近因為會議紀錄的表單製作上花了很多時間 決定改善作法讓他效率化一些 經果討論之後決定移到Notion 因為提案的是我所以我就負責實際執行這個移動資料歸檔跟轉換格式的作業 這篇文分享我移資料的時候感覺到的小重點跟心得
Thumbnail
資料整理是職場上的重要技能,也是一大挑戰! 透過專案管理的手法建立一套有效的資料管理系統,進而提升工作效率並獲得成功。
Thumbnail
資料整理是職場上的重要技能,也是一大挑戰! 透過專案管理的手法建立一套有效的資料管理系統,進而提升工作效率並獲得成功。
Thumbnail
在工作中,我們常常需要處理大量的資料,而表格是整理資料最有效的方式之一。然而,如果資料原本是文字格式,就需要先將其轉換成表格,才能進行後續的操作。將文字轉換成表格,可以讓資料更加清晰易讀,也方便進行整理和分析。
Thumbnail
在工作中,我們常常需要處理大量的資料,而表格是整理資料最有效的方式之一。然而,如果資料原本是文字格式,就需要先將其轉換成表格,才能進行後續的操作。將文字轉換成表格,可以讓資料更加清晰易讀,也方便進行整理和分析。
Thumbnail
從電腦桌面、檔案的管理,就可觀察出人的工作能力。 有些桌面是滿滿滿的Word、Excel、PPT、資料夾、程式...,還有檔名不同但內容相同、檔名相同但進度不同、多胞胎檔案散布各處....。 光要找到對的資料,就先耗費心神,大大影響工作效率。終於找到檔案可以開始作業,但戰鬥力被消磨掉不知道剩幾%了。
Thumbnail
從電腦桌面、檔案的管理,就可觀察出人的工作能力。 有些桌面是滿滿滿的Word、Excel、PPT、資料夾、程式...,還有檔名不同但內容相同、檔名相同但進度不同、多胞胎檔案散布各處....。 光要找到對的資料,就先耗費心神,大大影響工作效率。終於找到檔案可以開始作業,但戰鬥力被消磨掉不知道剩幾%了。
Thumbnail
我帶著敬畏的心去請教直屬主管,看有沒有讓自己進步的好辦法。結果直屬主管跟我說了這句話,霸氣外露的一句話讓我印象極為深刻,請教結束後主管還出了一門作業「SQL 轉置」,並特別交代我說:「你只要把這個技術學會就會變強」。
Thumbnail
我帶著敬畏的心去請教直屬主管,看有沒有讓自己進步的好辦法。結果直屬主管跟我說了這句話,霸氣外露的一句話讓我印象極為深刻,請教結束後主管還出了一門作業「SQL 轉置」,並特別交代我說:「你只要把這個技術學會就會變強」。
Thumbnail
去年的職涯歷程由「一人行銷」晉階帶領新人,同時也帶領大專院生參與電商大賽並獲獎。這段過程有很多收穫和啟發。原本自己一個人可以從頭到尾,把一件事情完整執行,轉變為必須建立系統方法,才能把已知的事務傳遞給新手,並且協助他們也把事情做好。 這段過程,發現建立順暢的工作流程和文件,相當重要。
Thumbnail
去年的職涯歷程由「一人行銷」晉階帶領新人,同時也帶領大專院生參與電商大賽並獲獎。這段過程有很多收穫和啟發。原本自己一個人可以從頭到尾,把一件事情完整執行,轉變為必須建立系統方法,才能把已知的事務傳遞給新手,並且協助他們也把事情做好。 這段過程,發現建立順暢的工作流程和文件,相當重要。
Thumbnail
有時我們不再追逐絢爛的外在,而開始在意質樸的本質。 工具大白話好書分享 專案管理-玩一場從不確定到確定的遊戲 作者:郝旭烈(郝哥) 商業周刊出版 不論我們所處產業或位階,難免會遇到大大小小的"專案",大的可是能一個據點工廠的建置,產品開發,小到辦一場員工座談會,都可以當作專案。只是當我們專注於很多的
Thumbnail
有時我們不再追逐絢爛的外在,而開始在意質樸的本質。 工具大白話好書分享 專案管理-玩一場從不確定到確定的遊戲 作者:郝旭烈(郝哥) 商業周刊出版 不論我們所處產業或位階,難免會遇到大大小小的"專案",大的可是能一個據點工廠的建置,產品開發,小到辦一場員工座談會,都可以當作專案。只是當我們專注於很多的
Thumbnail
此篇文章我整理了一點日常工作小貼士,不是那種:如何開好會議、如何製作簡報,這種主題明確、有很完整的工作重點、技巧分享,就是幾點小小的我自己的體會。
Thumbnail
此篇文章我整理了一點日常工作小貼士,不是那種:如何開好會議、如何製作簡報,這種主題明確、有很完整的工作重點、技巧分享,就是幾點小小的我自己的體會。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News