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

更新 發佈閱讀 5 分鐘
vocus|新世代的創作平台
沒有什麼是 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的沙龍
33會員
98內容數
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
我帶著敬畏的心去請教直屬主管,看有沒有讓自己進步的好辦法。結果直屬主管跟我說了這句話,霸氣外露的一句話讓我印象極為深刻,請教結束後主管還出了一門作業「SQL 轉置」,並特別交代我說:「你只要把這個技術學會就會變強」。
Thumbnail
我帶著敬畏的心去請教直屬主管,看有沒有讓自己進步的好辦法。結果直屬主管跟我說了這句話,霸氣外露的一句話讓我印象極為深刻,請教結束後主管還出了一門作業「SQL 轉置」,並特別交代我說:「你只要把這個技術學會就會變強」。
Thumbnail
從電腦桌面、檔案的管理,就可觀察出人的工作能力。 有些桌面是滿滿滿的Word、Excel、PPT、資料夾、程式...,還有檔名不同但內容相同、檔名相同但進度不同、多胞胎檔案散布各處....。 光要找到對的資料,就先耗費心神,大大影響工作效率。終於找到檔案可以開始作業,但戰鬥力被消磨掉不知道剩幾%了。
Thumbnail
從電腦桌面、檔案的管理,就可觀察出人的工作能力。 有些桌面是滿滿滿的Word、Excel、PPT、資料夾、程式...,還有檔名不同但內容相同、檔名相同但進度不同、多胞胎檔案散布各處....。 光要找到對的資料,就先耗費心神,大大影響工作效率。終於找到檔案可以開始作業,但戰鬥力被消磨掉不知道剩幾%了。
Thumbnail
有時我們不再追逐絢爛的外在,而開始在意質樸的本質。 工具大白話好書分享 專案管理-玩一場從不確定到確定的遊戲 作者:郝旭烈(郝哥) 商業周刊出版 不論我們所處產業或位階,難免會遇到大大小小的"專案",大的可是能一個據點工廠的建置,產品開發,小到辦一場員工座談會,都可以當作專案。只是當我們專注於很多的
Thumbnail
有時我們不再追逐絢爛的外在,而開始在意質樸的本質。 工具大白話好書分享 專案管理-玩一場從不確定到確定的遊戲 作者:郝旭烈(郝哥) 商業周刊出版 不論我們所處產業或位階,難免會遇到大大小小的"專案",大的可是能一個據點工廠的建置,產品開發,小到辦一場員工座談會,都可以當作專案。只是當我們專注於很多的
Thumbnail
在工作中,我們常常需要處理大量的資料,而表格是整理資料最有效的方式之一。然而,如果資料原本是文字格式,就需要先將其轉換成表格,才能進行後續的操作。將文字轉換成表格,可以讓資料更加清晰易讀,也方便進行整理和分析。
Thumbnail
在工作中,我們常常需要處理大量的資料,而表格是整理資料最有效的方式之一。然而,如果資料原本是文字格式,就需要先將其轉換成表格,才能進行後續的操作。將文字轉換成表格,可以讓資料更加清晰易讀,也方便進行整理和分析。
Thumbnail
團隊最近因為會議紀錄的表單製作上花了很多時間 決定改善作法讓他效率化一些 經果討論之後決定移到Notion 因為提案的是我所以我就負責實際執行這個移動資料歸檔跟轉換格式的作業 這篇文分享我移資料的時候感覺到的小重點跟心得
Thumbnail
團隊最近因為會議紀錄的表單製作上花了很多時間 決定改善作法讓他效率化一些 經果討論之後決定移到Notion 因為提案的是我所以我就負責實際執行這個移動資料歸檔跟轉換格式的作業 這篇文分享我移資料的時候感覺到的小重點跟心得
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
資料整理是職場上的重要技能,也是一大挑戰! 透過專案管理的手法建立一套有效的資料管理系統,進而提升工作效率並獲得成功。
Thumbnail
資料整理是職場上的重要技能,也是一大挑戰! 透過專案管理的手法建立一套有效的資料管理系統,進而提升工作效率並獲得成功。
Thumbnail
去年的職涯歷程由「一人行銷」晉階帶領新人,同時也帶領大專院生參與電商大賽並獲獎。這段過程有很多收穫和啟發。原本自己一個人可以從頭到尾,把一件事情完整執行,轉變為必須建立系統方法,才能把已知的事務傳遞給新手,並且協助他們也把事情做好。 這段過程,發現建立順暢的工作流程和文件,相當重要。
Thumbnail
去年的職涯歷程由「一人行銷」晉階帶領新人,同時也帶領大專院生參與電商大賽並獲獎。這段過程有很多收穫和啟發。原本自己一個人可以從頭到尾,把一件事情完整執行,轉變為必須建立系統方法,才能把已知的事務傳遞給新手,並且協助他們也把事情做好。 這段過程,發現建立順暢的工作流程和文件,相當重要。
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
此篇文章我整理了一點日常工作小貼士,不是那種:如何開好會議、如何製作簡報,這種主題明確、有很完整的工作重點、技巧分享,就是幾點小小的我自己的體會。
Thumbnail
此篇文章我整理了一點日常工作小貼士,不是那種:如何開好會議、如何製作簡報,這種主題明確、有很完整的工作重點、技巧分享,就是幾點小小的我自己的體會。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News