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
留言分享你的想法!
avatar-img
Warren Lo的沙龍
21會員
66內容數
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
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
全球科技產業的焦點,AKA 全村的希望 NVIDIA,於五月底正式發布了他們在今年 2025 第一季的財報 (輝達內部財務年度為 2026 Q1,實際日曆期間為今年二到四月),交出了打敗了市場預期的成績單。然而,在銷售持續高速成長的同時,川普政府加大對於中國的晶片管制......
Thumbnail
全球科技產業的焦點,AKA 全村的希望 NVIDIA,於五月底正式發布了他們在今年 2025 第一季的財報 (輝達內部財務年度為 2026 Q1,實際日曆期間為今年二到四月),交出了打敗了市場預期的成績單。然而,在銷售持續高速成長的同時,川普政府加大對於中國的晶片管制......
Thumbnail
重點摘要: 6 月繼續維持基準利率不變,強調維持高利率主因為關稅 點陣圖表現略為鷹派,收斂 2026、2027 年降息預期 SEP 連續 2 季下修 GDP、上修通膨預測值 --- 1.繼續維持利率不變,強調需要維持高利率是因為關稅: 聯準會 (Fed) 召開 6 月利率會議
Thumbnail
重點摘要: 6 月繼續維持基準利率不變,強調維持高利率主因為關稅 點陣圖表現略為鷹派,收斂 2026、2027 年降息預期 SEP 連續 2 季下修 GDP、上修通膨預測值 --- 1.繼續維持利率不變,強調需要維持高利率是因為關稅: 聯準會 (Fed) 召開 6 月利率會議
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
此篇文章我整理了一點日常工作小貼士,不是那種:如何開好會議、如何製作簡報,這種主題明確、有很完整的工作重點、技巧分享,就是幾點小小的我自己的體會。
Thumbnail
前言 會寫這一篇,其實是自從離開上一份工作後,從群組中(當然是退掉大部分工作群組了),看到暫時接手的同仁處理事情的狀況,而有感而發。 時間久了,也變得相當擅長。 打雜 各種狀況的說詞 比如: 群組中的客服:客人無法正常下載App,這樣怎麼辦? 就這樣,簡單、快速的處理這個雜事! 記帳 結語
Thumbnail
前言 會寫這一篇,其實是自從離開上一份工作後,從群組中(當然是退掉大部分工作群組了),看到暫時接手的同仁處理事情的狀況,而有感而發。 時間久了,也變得相當擅長。 打雜 各種狀況的說詞 比如: 群組中的客服:客人無法正常下載App,這樣怎麼辦? 就這樣,簡單、快速的處理這個雜事! 記帳 結語
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News