<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Sharon Lab∣雪倫實驗室</title>
	<atom:link href="https://aderlab.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://aderlab.com/</link>
	<description>數據分析師的工作日常與職場點滴</description>
	<lastBuildDate>Sun, 18 Oct 2026 10:50:22 +0000</lastBuildDate>
	<language>zh-TW</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://i0.wp.com/aderlab.com/wp-content/uploads/cropped-website-icon.png?fit=32%2C32&#038;ssl=1</url>
	<title>Sharon Lab∣雪倫實驗室</title>
	<link>https://aderlab.com/</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">164707546</site>	<item>
		<title>沒有經驗想轉職數據分析師，跨領域的第一份工作該怎麼找？</title>
		<link>https://aderlab.com/job/first-data-analyst-job/</link>
					<comments>https://aderlab.com/job/first-data-analyst-job/#respond</comments>
		
		<dc:creator><![CDATA[Sharon]]></dc:creator>
		<pubDate>Sun, 18 Oct 2026 10:49:42 +0000</pubDate>
				<category><![CDATA[數據分析]]></category>
		<category><![CDATA[職涯點滴]]></category>
		<guid isPermaLink="false">https://aderlab.com/?p=5691</guid>

					<description><![CDATA[<p>零經驗轉職數據分析師時，不必只盯著 Data Analyst 職稱。本文整理第一份相關工作怎麼找、履歷怎麼轉換與何時能開始投遞。</p>
<p>這篇文章 <a href="https://aderlab.com/job/first-data-analyst-job/">沒有經驗想轉職數據分析師，跨領域的第一份工作該怎麼找？</a> 最早出現於 <a href="https://aderlab.com">Sharon Lab∣雪倫實驗室</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">「不是相關科系畢業，也沒有數據分析師的工作經驗，真的有機會轉職嗎？」</p>



<p class="wp-block-paragraph">我不是資訊或數據相關科系畢業，也沒有留學背景。畢業之後，我從數位行銷做起，逐步接觸電商廣告數據、會員數據、營收數據，後來成功轉職成為數據分析師。現在回頭看，這條路其實幾經波折，過程中有需要重新學習的技能，也有對背景不夠亮眼的擔心，更有投了很多履歷，卻遲遲等不到回音的挫折。</p>



<p class="wp-block-paragraph">這篇想回到最初的求職階段，分享我如何跨領域轉換職缺，從行銷爭取第一份數據分析的工作機會。</p>



<h2 class="wp-block-heading">從過去的工作經驗，找出與數據分析的連結</h2>



<p class="wp-block-paragraph">當時我主要是數位廣告投手，負責 Google 以及 Facebook 的廣告投放，雖然職稱跟數據分析師沒有直接關係，但日常工作其實經常需要接觸各種數據，諸如廣告數據：廣告點擊率、轉換率、廣告投資報酬率（ROAS）、商品銷售數據：商品銷售數量、銷售金額，又或是網站行為分析，例如不同網頁的轉換率、停留時間、顧客的消費斷點等。</p>



<p class="wp-block-paragraph">所以跨領域轉職的第一步，我不是因辭職直接轉換，而是先在原本的公司持續累積，從完全沒有意識自己工作中用到各種數據決策、到後來有意識的整理自己運用數據的經驗、思維、成果，例如，當廣告成效不如預期時，我需要從數據中找出可能的原因，判斷是廣告素材、受眾設定，還是官方網站轉換流程出了問題，再根據分析結果調整投放策略。這些工作雖然沒用到 SQL 或 BI 工具，但背後其實就是數據分析的邏輯：發現問題、分析原因，再提出改善方式。</p>



<p class="wp-block-paragraph">因此，在準備轉職履歷時，我開始重新整理過去的工作內容，試著從單純描述「做過什麼」，改成說明「如何運用數據解決問題」。像是比起只寫「負責 Google、Facebook 廣告投放」，我會改成寫：「透過監測廣告點擊率，透過更換素材與調整受眾，提升點擊率50%」，又或是「透過Google Optimize 進行網頁 A/B testing，提升網站轉換率33%」，藉此讓讓面試官理解，自己如何利用數據發現問題，分析原因，並根據數據調整策略。</p>



<p class="wp-block-paragraph">如果你也沒有正式的數據分析經驗，可以先回頭看看過去的工作，有沒有需要追蹤 KPI、製作整理報表、比較成效，或是根據數字做出判斷的情境，而且最重要的是，不一定要使用SQL、Python等程式語言才算是有數據相關經驗，簡單的Excle表格、CRM後台、ERP系統、又或是網站 Google Analytics 這種第三方的數據分析工具，都會是很適合練習的素材，就算這些都沒有，網路上也可以在 Kaggle 搜尋例如 電商銷售資料、Google Analytics Demo Account 也是很好的第一步，從你可以取得的資源著手，開始練習找到問題、分析問題，並提出解決方案。讓面試官能理解，你並不是從零開始。</p>



<h2 class="wp-block-heading">從零開始，補足數據分析需要的技能</h2>



<p class="wp-block-paragraph">整理完過去的經驗後，我下一步就是補足數據分析工作需要的技術能力。當時我沒有資訊相關背景，也沒有實際使用資料庫的經驗，所以 SQL、Tableau、Power BI 對我來說，幾乎都是需要重新學習的工具。一開始最困難的地方，其實不是學習某個語法或功能，而是<strong>不知道究竟要學到什麼程度，才有資格開始投遞數據分析師的工作。</strong>尤其當你開始看職缺，會發現每間公司要求的工具都不太一樣，有些需要 SQL、Tableau，有些要求 Power BI、Python，甚至還會列出各種資料庫或統計分析技能，看得越多，反而越容易覺得自己什麼都不會。</p>



<p class="wp-block-paragraph">但回頭看，我覺得不需要等到所有工具都學會，才開始找工作，如果重來一次，我會先蒐集幾份自己有興趣的職缺，整理出最常出現的技能要求，再決定學習的優先順序，而不是看到什麼工具熱門，就急著全部學一遍。</p>



<p class="wp-block-paragraph">以一般商業數據分析的工作來說，我會建議先從 SQL 與一套 BI 工具開始。SQL 可以幫助你從資料庫取得需要的資料，進行篩選、彙整與比較；Tableau 或 Power BI 則能將分析結果整理成視覺化報表，讓其他人更容易理解數據。不過，學習工具的過程中，我認為還有一件更重要的事：<strong>不要只練習怎麼操作工具，也要練習如何用工具回答問題。</strong></p>



<p class="wp-block-paragraph">例如，學會 SQL 的 <code>GROUP BY</code> 之後，可以試著分析不同產品的營收表現；學會 Tableau 或 Power BI 的圖表功能後，可以進一步思考，哪些指標適合放在一起比較？如果營收下降，還需要查看哪些數據才能找到原因？</p>



<p class="wp-block-paragraph">這樣不只是在練習技術，也是在培養分析問題的能力，畢竟，實際工作時，很少有人會直接告訴你應該使用哪個 SQL 語法、製作哪一種圖表，更多時候，你拿到的只是一個問題，需要自己思考應該從哪些資料開始，所以，比起追求學會越多工具越好，我會更建議先把基礎學扎實，再透過實際的分析題目，確認自己是否真的能運用這些技能。這也是為什麼我認為，<strong>學習工具只是轉職的第一步，真正能展現能力的，還是你如何把學到的東西應用在實際問題上。</strong></p>



<h2 class="wp-block-heading">投了超過 30 封履歷，只有 2 個面試機會</h2>



<p class="wp-block-paragraph">而真正開始投履歷後，才是挑戰的開始！我的經驗是會有一段時間等不到理想回應的掙扎時期，雖然跨領域轉職之前，我就已經知道找工作可能不容易，但真正開始投，才感受到那個情緒落差，特別是比較你投原本的領域，跟跨領域的職缺，就會很明顯發現，跨領域的職缺幾乎都會遇到無聲卡，而當時的我則是投了超過 30 封履歷，一邊投、一邊修正，最後只獲得 2 家公司的面試機會。</p>



<p class="wp-block-paragraph">和應徵自己原本熟悉的職位相比，這種等待回音、卻常常沒有下文的過程，挫折感真的高很多。你會忍不住想，是不是背景不對？是不是學得還不夠？還是根本沒有人願意給跨領域的人機會？對我來說，能做的是持續檢查自己可以調整的地方：投遞的工作是否能接上既有經驗？履歷有沒有說清楚優勢？作品集是否能讓對方理解我已經具備的能力？如果有面試機會，也可以在結束後記錄哪些問題回答得不清楚、哪些技能被反覆問到，再回頭補強。</p>



<p class="wp-block-paragraph">每個人的求職條件與市場環境不同，我當時的投遞結果不代表每個人都會遇到相同情況，但這段經驗讓我知道，準備轉職時，除了安排學習時間，也需要替求職與反覆調整留一些空間與更多挫折的心理準備。</p>



<h2 class="wp-block-heading">一份針對公司的作品集，幫助我拿到第一份分析工作</h2>



<p class="wp-block-paragraph">當時我沒有正式的數據分析師職稱，所以除了履歷與求職信，也準備了數據作品集，而幫助我取得第一份分析工作的一個關鍵，就是我多準備了一份<strong>針對面試公司客製化的作品集</strong>。</p>



<p class="wp-block-paragraph">作品集讓「我已經準備好做數據分析」這件事，變得更具體，面試官可以看見我如何理解問題、整理資料，以及從數據中提出發現與建議，準備作品的過程，也讓我更清楚自己到底學會了多少。課程跟著做得出來，不代表遇到新的資料與問題，也知道怎麼開始，實際動手之後，才會發現哪些觀念還不熟、哪些技能還不知道怎麼應用、分析邏輯有哪些缺口，以及最後能不能把結果說清楚。</p>



<p class="wp-block-paragraph">第一份作品集不一定要一開始就做很大的題目，可以先選擇自己比較熟悉、也能解釋商業情境的方向，例如電商銷售、行銷活動、會員回購或產品使用行為。我的建議是，一次回答一個問題就好，不然在不熟悉數據分析框架的情況下，非常容易迷失在龐大的數據海裡。訂立題目之後，可以思考以下問題：</p>



<ol start="1" class="wp-block-list">
<li><strong>想回答什麼問題？</strong>為什麼值得分析？結果可能幫助誰做什麼決定？</li>



<li><strong>使用什麼資料？</strong>資料來源、期間與範圍是什麼？有哪些缺漏或限制？</li>



<li><strong>如何分析？</strong>使用哪些指標？為什麼這樣分類或比較？</li>



<li><strong>發現了什麼？</strong>哪些結果值得注意？資料能支持的結論到哪裡？</li>



<li><strong>下一步建議是什麼？</strong>可以採取什麼行動，或還需要補充哪些資料才能判斷？</li>
</ol>



<p class="wp-block-paragraph">這樣的作品能讓對方看見，你是否有基本的資料概念、能不能合理解讀數字，以及如何把結果連回商業問題，如果你正在準備這一步，可以參考<a href="https://aderlab.com/job/interview-profile/">〈數據分析師的作品集怎麼做？分享我實際作品與準備方式〉</a>。</p>



<h2 class="wp-block-heading">如果重來一次，我會給轉職新手的 3 個建議</h2>



<h3 class="wp-block-heading">第一、優先轉換職務，延續熟悉的產業經驗</h3>



<p class="wp-block-paragraph">想轉職的時候，通常有幾個面向可以改變：職務、職等，以及產業。例如，從行銷轉成數據分析，是職務的改變；從一般職員往主管發展，是職等與責任的改變；從電商轉到另一個產業，則需要重新認識業務模式與產業知識。</p>



<p class="wp-block-paragraph">當時的我選擇先聚焦在職務轉換，找以線上服務為主的公司，尤其是熟悉的電商產業。原因很直接：我需要補的數據技能已經很多，如果可以保留自己對產業與商業問題的理解，就比較有機會讓面試官看見，過去的經驗如何運用在新職位上。</p>



<p class="wp-block-paragraph">以當時的求職結果來說，我也確實比較容易在電商相關公司取得面試機會。這個經驗讓我覺得，準備跨領域時，可以先想想：下一份工作有哪些是全新的，又有哪些能延續原本的累積？例如，原本做行銷的人，可以先留意需要理解行銷成效的分析工作；熟悉客戶經營的人，也可以看看會員或 CRM 分析相關職缺。找到經驗與新職務的交集，會更容易說明自己為什麼適合。</p>



<h3 class="wp-block-heading">第二、學會分析工具，不代表懂得實際應用</h3>



<p class="wp-block-paragraph">確定想往分析工作發展之後，搜尋職缺時也可以把範圍稍微打開。</p>



<p class="wp-block-paragraph">除了 Data Analyst，也可以留意 Business Analyst、Marketing Analyst、Product Analyst、CRM Analyst、Operations Analyst，以及部分電商、行銷或營運職缺。但這些職稱在不同公司，可能代表很不一樣的工作。例如，Business Analyst 有些偏商業數據分析，有些則偏向流程、系統需求與專案協作。因此，看到名稱之後，還是要仔細閱讀職務說明。</p>



<p class="wp-block-paragraph">我會建議從三個方向判斷：</p>



<ol start="1" class="wp-block-list">
<li><strong>會接觸什麼資料與工具？</strong>是否需要使用 SQL、Excel、BI 工具或資料庫？工作是整理既有報表，還是有機會自行取得、處理與分析資料？</li>



<li><strong>需要回答什麼問題？</strong>是否涉及 KPI、成效分析、客群分析、營運問題或商業建議？還是主要負責固定的資料輸入與行政整理？</li>



<li><strong>會和哪些人合作？</strong>是否需要和行銷、產品、營運等單位確認需求、討論結果，並協助後續決策？</li>
</ol>



<p class="wp-block-paragraph">這些可以作為初步篩選的方向。進入面試後，再進一步確認各項工作的比例、實際專案，以及有沒有能提供指導的主管或同事。第一份工作不一定要叫做 Data Analyst，但值得確認，它能不能讓你累積自己想發展的分析能力。</p>



<h3 class="wp-block-heading">第三、想成功轉職，就要懂得有所取捨</h3>



<p class="wp-block-paragraph">那時的我剛出社會沒幾年，對於職稱與工作條件的調整，相對還有一些彈性，但即使如此，我還是經歷了一段掙扎的過程。當時投了超過 30 封履歷，最後只有 2 家公司給我面試機會，而真正願意錄取我的，只有其中 1 家，換句話說，<strong>我幾乎沒有其他選擇，更沒有太多談判的空間。</strong></p>



<p class="wp-block-paragraph">偏偏這間公司的文化與工作環境，都不是我原本的第一順位，當時的我甚至一度猶豫，是不是應該放棄轉職，回到自己熟悉的行銷領域？後來，我用「<strong>要有所取，就要有所捨</strong>」的心態說服自己。既然現階段最重要的目標，是取得第一份數據分析的工作經驗，那麼這份工作就可以是我的敲門磚。即使不是最理想的選擇，只要能累積真正的分析能力，未來有了更多實務經驗，自然也會有更多選擇的機會。</p>



<p class="wp-block-paragraph">如果你也準備跨領域轉職，我會建議先想清楚：<strong>自己最希望從第一份相關工作中得到什麼？又有哪些條件是願意妥協的？</strong>例如，你可能需要接受從較基礎的職位開始、薪資不一定符合原本的期待、公司不是心目中的第一順位，或是工作內容並非 100% 都與數據分析有關，甚至需要忍受比較長的通勤時間。每個人的生活負擔與工作條件不同，能接受的範圍自然也不一樣，比起等到拿到 Offer 才開始猶豫，我更建議在求職前，就先釐清自己的優先順序。</p>



<p class="wp-block-paragraph">對當時的我來說，<strong>最重要的是這份工作能不能讓我真正使用數據分析技能，並累積實務經驗。</strong> 因此，我選擇接受比較傳統的公司文化，也說服自己，即使通勤時間比較長，只要能換來未來更好的職涯發展機會，這些都是現階段可以接受的取捨。</p>



<p class="wp-block-paragraph">如果你還不確定自己的優先順序，可以先列出第一份數據分析工作中，希望獲得的經驗，例如：</p>



<ul class="wp-block-list">
<li>有機會使用 SQL 或其他分析工具處理真實資料。</li>



<li>能參與從需求確認、資料分析到結果交付的完整流程。</li>



<li>可以和業務單位討論問題，了解分析結果如何被運用在商業決策中。</li>



<li>遇到不熟悉的問題時，有主管或同事可以討論並提供回饋。</li>
</ul>



<p class="wp-block-paragraph">接著，再列出自己願意妥協的條件，以及不能接受的底線。</p>



<p class="wp-block-paragraph">不過，<strong>願意有所取捨，不代表什麼條件都應該接受。</strong> 如果一份工作雖然掛著數據分析師的職稱，實際上卻沒有機會接觸分析工作，那麼即使成功轉職，也未必能累積自己真正需要的能力，回頭看，我很慶幸當時沒有因為公司條件不夠理想，就直接放棄這次機會。雖然第一份分析工作不是我心目中的完美選擇，但它確實讓我跨出了轉職最困難的第一步，也成為後續職涯發展的重要基礎，與其什麼條件都想要，卻遲遲無法跨出第一步，不如先想清楚現階段最重要的是什麼，再決定哪些值得爭取、哪些可以暫時放下。</p>



<h2 class="wp-block-heading">結語：轉職的第一步，是累積更多選擇的開始</h2>



<p class="wp-block-paragraph">回頭看，我能取得第一份數據分析工作，是幾件事情慢慢累積起來的結果：保留熟悉的產業背景、補上需要的數據工具、整理能說明能力的作品，以及在求職過程中持續調整。</p>



<p class="wp-block-paragraph">如果你正在準備轉職，可以先做三件事：找幾份感興趣的職缺，圈出共同要求；整理一段和資料或商業問題有關的工作經驗；再完成一份自己能清楚解釋的作品，當這些準備逐漸具體，就可以開始嘗試投遞，從真實的職缺與面試過程中，確認下一步需要補強的地方。</p>



<p class="wp-block-paragraph">而開始第一份數據相關工作，會讓你開始接觸真實資料、商業問題與跨部門協作，這些經驗累積起來，未來不論想往產品分析、商業分析，或挑戰外商，都會有更扎實的實戰經驗可以成為你下一步強而有力的籌碼，希望我的經驗，能幫助你找到一個可以開始行動的方向，我們下篇文章見～</p>



<div class="wp-block-group aderlab-article"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<p class="has-text-align-right wp-block-paragraph">Sharon</p>



<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide"/>



<p class="has-medium-font-size wp-block-paragraph"><strong>Buy me a coffee 用行動支持我的內容創作</strong></p>



<p class="wp-block-paragraph"><em>如果文章對你有幫助，歡迎用小額贊助支持 Sharon 持續分享數據分析實務。</em></p>



<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="wp-block-button aligncenter is-style-fill"><a class="wp-block-button__link has-black-color has-luminous-vivid-amber-background-color has-text-color has-background wp-element-button" href="https://www.buymeacoffee.com/aderlabsharon" target="_blank" rel="noreferrer noopener">以小額贊助支持 Sharon</a></div>
</div>
</div></div>
<p>這篇文章 <a href="https://aderlab.com/job/first-data-analyst-job/">沒有經驗想轉職數據分析師，跨領域的第一份工作該怎麼找？</a> 最早出現於 <a href="https://aderlab.com">Sharon Lab∣雪倫實驗室</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://aderlab.com/job/first-data-analyst-job/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5691</post-id>	</item>
		<item>
		<title>在職場被打壓？從《理智派生活》看辭職以外的另一種選擇</title>
		<link>https://aderlab.com/life-note/drama-the-rational-ife/</link>
					<comments>https://aderlab.com/life-note/drama-the-rational-ife/#respond</comments>
		
		<dc:creator><![CDATA[Sharon]]></dc:creator>
		<pubDate>Mon, 12 Oct 2026 08:39:44 +0000</pubDate>
				<category><![CDATA[生活點評]]></category>
		<category><![CDATA[隨手寫]]></category>
		<guid isPermaLink="false">https://aderlab.com/?p=5432</guid>

					<description><![CDATA[<p>在職場受到打壓時，你會選擇離開，還是留下來試著改變處境？ 最近看了《理智派生活》，雖然劇中有不少戀愛的粉紅泡泡，也有一些英雄救美的橋段，但最讓我印象深刻的，是沈&#8230;</p>
<p><a href="https://aderlab.com/life-note/drama-the-rational-ife/" class="btn-continue">繼續閱讀<span class="arrow-continue">&#8594;</span></a></p>
<p>這篇文章 <a href="https://aderlab.com/life-note/drama-the-rational-ife/">在職場被打壓？從《理智派生活》看辭職以外的另一種選擇</a> 最早出現於 <a href="https://aderlab.com">Sharon Lab∣雪倫實驗室</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">在職場受到打壓時，你會選擇離開，還是留下來試著改變處境？</p>



<p class="wp-block-paragraph">最近看了《理智派生活》，雖然劇中有不少戀愛的粉紅泡泡，也有一些英雄救美的橋段，但最讓我印象深刻的，是沈若歆面對職場打壓時的選擇。從法務部被調到行政部，原本期待的升遷落空，她卻開始運用手上的工作，讓其他人看見自己的專業，逐步在新能源事業中找到新的發展機會。</p>



<p class="wp-block-paragraph">這篇想聊聊，她如何在不理想的處境，為自己爭取更多選擇，以及值得反思的四種工作態度。</p>



<h3 class="wp-block-heading">從哪裡跌倒，就從哪裡站起來</h3>



<p class="wp-block-paragraph">故事的起源，女主因為一樁汽車自燃案被誣陷，導致輿論炎上，不得不被調離法務部，不僅錯失原本有機會取得的法務部總監一位，更被轉到與她專業完全不相關的行政部，雖然一樣是經理職位，但實則是變向打壓，意圖逼迫女主主動請辭的調動。面對這種打壓與公司的誤解，女主其實完全有底氣離職找到更好的工作，但她沒有，她不管旁人的閒言碎語、把行政部沒人想做的事情做好，只為了等待時機，讓自己未來有一天可以重回法務部。</p>



<p class="wp-block-paragraph">看到這一幕我其實是非常欽佩的，因為女主同時忍受了閒言閒語、委屈，還有還差一步就達到的晉升之位，一般人遇到這種情況很容易心灰意冷，再加上以她的工作能力與經驗，完全不愁找不到下一間公司，但是她忍，她說「如果是針對她個人，她可能會走；但這件事是針對她的工作能力的質疑，所以她不接受」，她就是要留下來，證明自己工作能力。</p>



<p class="wp-block-paragraph">我佩服的是，她在留下來之後，依然主動尋找能發揮專業的機會，這也讓我想到：如果選擇留下來，自己期待改變的是什麼？又有哪些實際可以爭取的空間？這些問題，可能比一心想證明自己更值得先想清楚。</p>



<h3 class="wp-block-heading">爭取職場能見度</h3>



<p class="wp-block-paragraph">後來，隨著總部新能源汽車的發展，總部新能源部總經理徐敏傑到女主所在的上海發展新能源汽車，行政部被指派的第一項任務就是幫總經理找住宿，條件很嚴苛，一絲不苟，以一般人來看就是特別刁鑽，特別難纏的工作，但是接下任務的女主卻處理的井井有條，不僅條件完全符合，甚至善用了她法律的背景一條一條核對仲介不合理的租賃條文，也就是因為這樣的能力，讓初來乍到的徐敏傑總經理刮目相看。甚至後來女主也主動接下幫忙新能源部事項，等於是同時要做行政部的工作，也要支援新能源部徐總的任務，身為行政部主一員，其實可以不用這麼辛苦身兼二職，但是女主的主動以及工作態度，讓她成功得到新老闆的賞識，也是她後來可以一路逆襲的關鍵。</p>



<p class="wp-block-paragraph">劇中還有一幕是，女主角的助理問「合約是法務部的事，你怎麼還幫他們（法務部）緊張著」，女主則回答「你傻啊，我抱大腿去了」，意思是，女主角善用有合約的機會，再加上自己有法律的專業，適時的把自己會什麼、自己積極的工作態度呈現在新的老闆面前，那麼未來如果有機會有事情，新的老闆也才會第一時間想到女主，這正是爭取能見度的最佳機會！所以即便業務其實跟自己不相關，不多幫忙也不會影響績效，但是她卻透過多做一點，讓自己成功在老闆心中留下印象。</p>



<p class="wp-block-paragraph">這段讓我看到，爭取能見度也需要選擇切入點，沈若歆利用租屋合約這個具體任務，展現了法律專業與處理細節的能力，也讓新主管知道，未來遇到哪些問題可以想到她。</p>



<h3 class="wp-block-heading">總是帶著解決方案才找老闆</h3>



<p class="wp-block-paragraph">在新能源汽車發展的第一個活動汽車試駕，女主給了一個新穎的點子，親子主題的試駕搭配觀星活動，例如：提供親子主題的全新想法，找到適合親子觀星的地點，甚至在行銷部門找KOL出包的時候，主動思考並聯繫了天文、自然生態相關的KOL，都體現出女主「主動解決問題」的能力，而這些行動的背後都反映出女主角不僅僅是找到問題、發現問題，每一次都是帶著自己準備好的選項給老闆選擇，也就是說，她沒有被動的等待指令，而是主動想並且做了很多解決方案，這也是讓新的老闆非常器重並給予肯定的重要原因之一。</p>



<h3 class="wp-block-heading">犯錯後的彌補與修正</h3>



<p class="wp-block-paragraph">雖然這部戲，女主角的能力、工作態度以及問題解決能力真的非常優秀，但是，女主角也不是都一帆風順，例如說在第一次汽車試駕會的時候，因為同事疏忽漏了卸下放在遊覽車上的兒童座椅（沒有兒童座椅就無法帶孩子開車上路），差點害整個活動開天窗，但是女主第一時間想的不是指責負責的同事，而是先著眼解決眼下的問題，例如：調配同事幫忙找附近的兒童座椅替代，跟老闆爭取提供消費者購車補償，主動提出會寫檢討報告，並承諾可以以自己的季度獎金為代價等，都展現了女主角負責任。此外，後續發生電動汽車充電樁的充電問題，雖然充電樁並不直接隸屬於女主的汽車銷售公司，但是對於消費者來說，不論是汽車公司或是充電樁的問題都不重要，重點是買了電動車後續卻有一系列的使用麻煩，這些「非自己公司的責任」，女主也是積極與合作公司共同解決，為公司以及顧客創造雙贏的結果。</p>



<p class="wp-block-paragraph">後來，隨著女主接觸新能源汽車事業的涉略度愈來愈廣，她也主動放棄回到法務部的機會，從新能源事業部的統籌規劃做起，等於是重頭來過。但她沒有因為領域不同就抗拒，反而在領域不同的情況下，依舊願意捲起袖子做做看，展現了她的十足的學習力。總體來說，整部劇我覺得各個挑戰與職場政治鬥爭下的使絆子，都讓女主的專業跟優秀的能力表露無遺，這些職場的做事態度以及思考，也非常值得回味與學習！</p>



<p class="wp-block-paragraph">最後讓我有感的，是沈若歆原本一心想回到法務部，卻在接觸新能源事業的過程中，發現了另一條值得投入的路。她最初想證明自己的地方，最後也不再是唯一的目的地。這讓我想到，受到職場打壓時，我們可能很容易把注意力放在「我要怎麼讓那些人改觀」。但自己的時間與能力，還能放在哪裡？有哪些機會值得爭取？也是值得思考的問題。</p>



<p class="wp-block-paragraph">如果是你，會在什麼情況下選擇留下，又會在什麼時候決定離開呢？</p>



<p class="wp-block-paragraph">這部好看的職場劇就分享到這裡，剩下的就留給你們自己觀賞品味啦，我們下篇文章見：）</p>



<p class="has-text-align-right wp-block-paragraph">Sharon</p>



<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide"/>



<p class="has-medium-font-size wp-block-paragraph"><strong>Buy me a coffee&nbsp; 用行動支持我的內容創作</strong></p>



<p class="wp-block-paragraph"><em>如果我的文章對你有幫助，歡迎用行動支持我的內容創作，小額贊助請我喝咖啡、留言或是寄信來跟我分享你的收穫，都會讓我持續有動力分享更多內容唷～</em></p>



<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="wp-block-button aligncenter is-style-fill"><a class="wp-block-button__link has-black-color has-luminous-vivid-amber-background-color has-text-color has-background wp-element-button" href="https://www.buymeacoffee.com/aderlabsharon" target="_blank" rel="noreferrer noopener">以小額贊助支持Sharon</a></div>
</div>
<p>這篇文章 <a href="https://aderlab.com/life-note/drama-the-rational-ife/">在職場被打壓？從《理智派生活》看辭職以外的另一種選擇</a> 最早出現於 <a href="https://aderlab.com">Sharon Lab∣雪倫實驗室</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://aderlab.com/life-note/drama-the-rational-ife/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5432</post-id>	</item>
		<item>
		<title>需求明明很清楚，為什麼還是做白工？數據分析師最容易忽略的 5 個盲點</title>
		<link>https://aderlab.com/data-analytics/clear-data-requests-need-clarification/</link>
					<comments>https://aderlab.com/data-analytics/clear-data-requests-need-clarification/#respond</comments>
		
		<dc:creator><![CDATA[Sharon]]></dc:creator>
		<pubDate>Thu, 01 Oct 2026 01:00:00 +0000</pubDate>
				<category><![CDATA[數據分析]]></category>
		<category><![CDATA[職涯點滴]]></category>
		<category><![CDATA[數據分析師]]></category>
		<category><![CDATA[職場軟實力]]></category>
		<category><![CDATA[跨部門溝通]]></category>
		<category><![CDATA[需求訪談]]></category>
		<guid isPermaLink="false">https://aderlab.com/?p=5789</guid>

					<description><![CDATA[<p>需求已經列好指標，為什麼交件後還是改不停？用電商會員名單、客單價與回購情境，拆解數據分析師常忽略的 5 個需求盲點，學會在寫 SQL 前問對問題。</p>
<p>這篇文章 <a href="https://aderlab.com/data-analytics/clear-data-requests-need-clarification/">需求明明很清楚，為什麼還是做白工？數據分析師最容易忽略的 5 個盲點</a> 最早出現於 <a href="https://aderlab.com">Sharon Lab∣雪倫實驗室</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-group aderlab-article"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<p class="wp-block-paragraph">「幫我抓出今年截至目前，累積消費金額最高的 15 位會員，再列出他們的訂單數、平均客單價，以及最近一次購買日期。」</p>



<p class="wp-block-paragraph">把我遇過的需求情境換成電商案例，大概就像上面這句話。對象、時間範圍、排名條件和指標都列好了，聽起來很明確，應該可以直接開始撈資料了吧？</p>



<p class="wp-block-paragraph">以前的我，可能已經打開資料庫，開始寫 SQL。但後來我才發現，除了模糊的需求需要釐清，這種看起來已經很完整的需求，也值得多問幾句。因為對方清楚說出「想要哪些資料」，不代表我們已經理解「他想解決什麼問題」。</p>



<h2 class="wp-block-heading">他列出的欄位，可能只是他知道的那幾個</h2>



<p class="wp-block-paragraph">需求方提出的資料清單，往往受限於他對資料的認識。他知道哪些指標，就會先提出哪些指標；其他可能更有幫助的資訊，他未必知道可以取得。</p>



<p class="wp-block-paragraph">我曾經遇過這樣的情況：需求方要了一份高消費客戶名單，名單交出去後，我卻發現，對方不是直接用資料，居然還打開系統後台，一位會員、一位會員地查詢歷史累積消費金額、首次購買日期，以及過去下過幾筆訂單。</p>



<p class="wp-block-paragraph">原來，對方不知道這些資料也可以一起撈出來。</p>



<p class="wp-block-paragraph">如果一開始多問一句：「你拿到這份名單之後，接下來會做什麼？」我們可能就能提早發現這些需求，省下後續人工查找的時間。身為分析師，我們比需求方更熟悉資料存在哪裡、有哪些欄位，以及可以如何組合。這份專業，也能用來幫對方找到更適合的資訊。</p>



<h2 class="wp-block-heading">名單抓對了，行銷卻做錯了：你問過用途嗎？</h2>



<p class="wp-block-paragraph">「這份資料，你打算拿來做什麼？」</p>



<p class="wp-block-paragraph">有時候，得到的回答會是：「其實我也不確定，我再去問一下。」</p>



<p class="wp-block-paragraph">聽到這裡，先別急著覺得對方沒有準備好。有時候，他只是接到主管或客戶的問題，希望盡快把資料準備齊全，還沒機會確認背後的目的，而這份資料究竟能不能回答問題，正是我們需要一起釐清的地方。</p>



<p class="wp-block-paragraph">同樣以「Q1 到 Q2 累積消費金額最高的 15 位會員」為例，如果目的是喚回舊客，只按照消費金額排名，可能就找錯了對象。因為這 15 位會員如果至今仍持續下單，就未必需要被「喚回」。我們可能還需要看距離上次購買的天數、過往購買頻率，以及最近一段時間是否仍有訂單。</p>



<p class="wp-block-paragraph">即使同樣是 60 天沒購買，對每月補貨的消耗品和一年才換一次的耐用品來說，意義也不一樣。要找誰回來，得先理解商品的購買週期。</p>



<p class="wp-block-paragraph">另外，為什麼是 15 位？是因為活動預算只能支援 15 位客戶？行銷團隊一次只能聯繫這麼多人？還是對方只是先提出一個數字？</p>



<p class="wp-block-paragraph">這些答案會影響名單該怎麼篩選，也會影響後續是否需要調整人數。多問幾句，是在幫雙方確認：眼前準備做的事情，是否真的能支援接下來的行動。</p>



<h2 class="wp-block-heading">「再幫我拆一下」：為什麼交件才是修改的開始？</h2>



<p class="wp-block-paragraph">有些需求在提出時，對方確實已經想過了。只是看到實際結果之後，才發現資料和自己想像的不太一樣。</p>



<p class="wp-block-paragraph">例如，一開始只想看某個商品類別的營收和訂單數，拿到資料後才發現，還需要拆分新客與舊客、廣告與自然流量，才能判斷成長來自哪裡。又或者，原本指定最近 30 天的轉換率，看到結果後才想起，這次要評估的是上週才開始的促銷活動，因此需要另外看活動期間的表現。時間範圍一改，比較基準也得一起確認。</p>



<p class="wp-block-paragraph">這類調整未必代表對方反覆無常。有些問題，確實要等資料攤開來，才會變得具體。</p>



<p class="wp-block-paragraph">但我們可以讓這個確認提早發生。在完成整份分析之前，先提供一小部分資料、簡單的圖表，或預計交付的欄位，讓對方確認：「這樣的內容，能幫你回答原本的問題嗎？」</p>



<p class="wp-block-paragraph">提早看到結果的樣貌，通常比等到全部做完後再修改，更容易控制調整的範圍。</p>



<h2 class="wp-block-heading">「你是專業的，你決定」：最容易漏掉的業務背景</h2>



<p class="wp-block-paragraph">還有一種情況是，需求方認為自己只需要提出想法，至於該用什麼指標、怎麼抓資料、如何分析，都應該交給分析師判斷。這樣的期待可以理解。畢竟，處理資料確實是我們的專業。</p>



<p class="wp-block-paragraph">不過，有些資訊仍然需要需求方提供：為什麼現在需要這份分析？結果會交給誰看？看完之後，會做什麼決定？如果缺少這些背景，即使分析師有能力把資料處理得很完整，也可能選錯方向。</p>



<p class="wp-block-paragraph">所以，遇到這類需求時，我會把問題問得更具體：「你現在最想確認的是什麼？」「如果結果比預期高或低，你接下來會怎麼做？」</p>



<p class="wp-block-paragraph">如果需求方依舊請你出意見，那也沒關係，了解業務背景與決策情境，才有辦法發揮你的分析專業，判斷資料和方法，雙方的專業才有機會接起來。</p>



<h2 class="wp-block-heading">一句「順便看一下」，讓分析範圍愈做愈大</h2>



<p class="wp-block-paragraph">有時候，需求一開始真的很單純，只是資料帶出了新的問題。</p>



<p class="wp-block-paragraph">例如，原本只是想估算促銷活動的營收，看到結果後才發現，有少數會員下了大額訂單，拉高整體平均客單價。接著，對方又想看這些人買了什麼、用了哪些優惠券，以及後續是否回購。</p>



<p class="wp-block-paragraph">這也是分析的價值之一：資料能幫助我們發現原本沒想到的事情。只是，新想法出現之後，最好先停下來確認優先順序，例如，這個發現會不會改變原本的結論？需要在這次交付前處理嗎？還是可以另外安排下一輪分析？</p>



<p class="wp-block-paragraph">分析師也可以主動提出判斷。例如：「目前平均客單價受到幾筆大額訂單影響。我建議先比較包含與排除這些訂單的結果，再決定要不要深入分析這群會員。」</p>



<p class="wp-block-paragraph">帶著初步觀察和建議討論，更有助於雙方決定下一步，也能避免分析範圍在不知不覺中持續擴大。</p>



<h2 class="wp-block-heading">少做白工的關鍵：寫 SQL 前，先多問這一句</h2>



<p class="wp-block-paragraph">做了幾次這樣的需求之後，我愈來愈常把這句話放在開始工作的前面：「你想拿這份資料做什麼？」</p>



<p class="wp-block-paragraph">這個問題，能幫我們判斷該找哪些資料、用什麼方式呈現，以及做到什麼程度才足夠。另一件同樣重要的事，是分析師自己必須清楚這份資料的解讀限制。</p>



<p class="wp-block-paragraph">以電商資料來說，消費金額有沒有扣除退款？訂單數是否排除取消訂單？平均客單價使用哪一種金額與訂單口徑？計算回購率時，觀察的是哪一批會員、多久內的再次購買？這些定義會影響結果。若新會員加入時間不同，有些人甚至還沒有完整的回購觀察期，也不適合直接拿同一個比例比較。</p>



<p class="wp-block-paragraph">理解用途，讓我們知道資料該怎麼準備；理解限制，則能幫助對方更恰當地使用結果。愈明確的需求，往往愈容易讓人想立刻動手。但在打開資料庫之前，多花一點時間確認背後的目的，常常能省下後續更多的修改與往返。</p>



<p class="wp-block-paragraph">下次收到一份條件完整、指標清楚的需求時，不妨先多問一句：「了解，那這份資料的目的是什麼，打算怎麼用？」</p>



<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide"/>



<p class="has-medium-font-size wp-block-paragraph"><strong>Buy me a coffee 用行動支持我的內容創作</strong></p>



<p class="wp-block-paragraph"><em>如果文章對你有幫助，歡迎用小額贊助支持 Sharon 持續分享數據分析實務。</em></p>



<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="wp-block-button aligncenter is-style-fill"><a class="wp-block-button__link has-black-color has-luminous-vivid-amber-background-color has-text-color has-background wp-element-button" href="https://www.buymeacoffee.com/aderlabsharon" target="_blank" rel="noreferrer noopener">以小額贊助支持 Sharon</a></div>
</div>
</div></div>
<p>這篇文章 <a href="https://aderlab.com/data-analytics/clear-data-requests-need-clarification/">需求明明很清楚，為什麼還是做白工？數據分析師最容易忽略的 5 個盲點</a> 最早出現於 <a href="https://aderlab.com">Sharon Lab∣雪倫實驗室</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://aderlab.com/data-analytics/clear-data-requests-need-clarification/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5789</post-id>	</item>
		<item>
		<title>SQL 面試題進階：CTE、Window Function 與 10 道常見練習題（下）</title>
		<link>https://aderlab.com/data-analytics/sql-interview-advanced-part-two/</link>
					<comments>https://aderlab.com/data-analytics/sql-interview-advanced-part-two/#respond</comments>
		
		<dc:creator><![CDATA[Sharon]]></dc:creator>
		<pubDate>Thu, 24 Sep 2026 08:44:22 +0000</pubDate>
				<category><![CDATA[SQL]]></category>
		<category><![CDATA[數據分析]]></category>
		<category><![CDATA[SQL面試題]]></category>
		<category><![CDATA[數據分析師面試]]></category>
		<guid isPermaLink="false">https://aderlab.com/?p=5704</guid>

					<description><![CDATA[<p>接續第 6～10 題，練習 30 天回購率、連續購買、顧客分群、新舊客營收與 Cohort 留存，釐清觀察期與指標定義。</p>
<p>這篇文章 <a href="https://aderlab.com/data-analytics/sql-interview-advanced-part-two/">SQL 面試題進階：CTE、Window Function 與 10 道常見練習題（下）</a> 最早出現於 <a href="https://aderlab.com">Sharon Lab∣雪倫實驗室</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-group aderlab-article"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<p class="wp-block-paragraph">上一篇 <a href="https://aderlab.com/data-analytics/sql-interview-advanced-part-one/">SQL 面試題進階：CTE、Window Function 與 10 道常見練習題（上）</a>，我們用五道題目練習 CTE、累積計算與排名。你應該已經發現，進階 SQL 不只是多寫幾層 WITH，而是每一層都要知道自己正在回答哪個問題。</p>



<p class="wp-block-paragraph">這篇接著分享第 6～10 題，從 30 天內回購率一路練習到 Cohort 留存。這幾題更接近實務分析，也更容易出現「Query 可以執行，但指標定義不對」的情況。</p>



<h2 class="wp-block-heading"><strong>練習使用的資料表與共同假設</strong></h2>



<p class="wp-block-paragraph">SQL 延續入門篇，使用 Amazon Athena engine version 3 語法。orders 包含 order_id、customer_id、order_date、order_status、total_amount；order_date 是 YYYYMMDD 整數，例如 20250831，需要先轉成 DATE。</p>



<p class="wp-block-paragraph">以下假設一列就是一張訂單，order_id 唯一，customer_id 與日期沒有缺漏，日期也都是有效值；completed 代表納入分析的完成訂單。total_amount 是已確認可加總、非 NULL 的最終金額，折扣、退款與運費處理一致，且已統一幣別。這些是假設，實務上要先和面試官確認，不能只靠欄位名稱猜測。</p>



<p class="wp-block-paragraph">每題都附上 clean_orders，讓你可以各自複製整段 SQL 練習。它只處理訂單狀態與日期轉換，並不會自動解決重複資料、退款或異常日期。若原始資料是商品明細，請先整理成每張訂單一列；如果歷史不完整，首購相關結果只能稱為「可觀察資料中的首購」。</p>



<h2 class="wp-block-heading"><strong>第 6 題：如何計算 30 天內回購率？</strong></h2>



<p class="wp-block-paragraph">首購後 30 天內有沒有再買，看起來找第二筆訂單就能回答。但昨天才首購的人，和已經觀察三個月的人，真的能一起放進分母嗎？</p>



<p class="wp-block-paragraph">下手之前，你可以先問：</p>



<p class="wp-block-paragraph">1. 30 天內是否包含首購當天的另一張訂單，以及第 30 天？</p>



<p class="wp-block-paragraph">2. 回購率分母是首購顧客，還是所有購買顧客？</p>



<p class="wp-block-paragraph">3. 資料完整到哪一天？每位顧客是否都已經有完整 30 天可以觀察？</p>



<p class="wp-block-paragraph">假設資料完整到 2025 年 6 月 30 日，只納入首購後已滿 30 天的顧客；同日另一張完成訂單也算回購，第 30 天包含在內。用 order_id 區分訂單，避免把首購本身算成回購。</p>



<pre class="wp-block-code"><code>WITH clean_orders AS (
    SELECT
        order_id
        , customer_id
        , CAST(DATE_PARSE(CAST(order_date AS VARCHAR), '%Y%m%d') AS DATE) AS order_dt
        , total_amount
    FROM orders
    WHERE order_status = 'completed'
),
params AS (
    SELECT
        DATE '2025-06-30' AS as_of_date
),
ranked AS (
    SELECT
        o.*
        , ROW_NUMBER() OVER (
            PARTITION BY customer_id ORDER BY order_dt, order_id
        ) AS rn
    FROM clean_orders o CROSS JOIN params p
    WHERE o.order_dt &lt;= p.as_of_date
), eligible AS (
    SELECT
        r.customer_id
        , r.order_id AS first_order_id
        , r.order_dt AS first_dt
    FROM ranked r CROSS JOIN params p
    WHERE r.rn = 1 AND DATE_ADD('day', 30, r.order_dt) &lt;= p.as_of_date
), flags AS (
    SELECT
        f.customer_id
        , MAX(CASE WHEN o.order_id IS NOT NULL THEN 1 ELSE 0 END) AS has_repeat
    FROM eligible f LEFT JOIN clean_orders o
      ON f.customer_id = o.customer_id
     AND o.order_id &lt;&gt; f.first_order_id
     AND o.order_dt BETWEEN f.first_dt AND DATE_ADD('day', 30, f.first_dt)
    GROUP BY f.customer_id
)
SELECT
    COUNT(*) AS eligible_customers
    , COALESCE(SUM(has_repeat), 0) AS repeat_customers
    , ROUND(100.0 * SUM(has_repeat) / NULLIF(COUNT(*), 0), 2) AS repeat_rate_pct
FROM flags;</code></pre>



<p class="wp-block-paragraph">先決定誰有資格進入分母，再為每位顧客建立是否回購的旗標。一個人買五次也只算一位回購顧客。沒有符合觀察期的顧客時，比例回傳 NULL，不能把「無法計算」寫成 0%。</p>



<p class="wp-block-paragraph">例如 6 月 1 日首購，到 6 月 30 日還沒有滿 30 天，就不納入分母；5 月 31 日首購則可以。若公司規定同日不算回購，把日期下限改成 o.order_dt &gt; f.first_dt。只有日期時，也不能宣稱這是精確到小時的 720 小時回購率。</p>



<h2 class="wp-block-heading"><strong>第 7 題：如何找出連續兩個月購買的顧客？</strong></h2>



<p class="wp-block-paragraph">同一位顧客有兩筆訂單，不代表他連續兩個月都買過。先想一下，如果兩張都在 1 月，直接對訂單使用 LAG 會得到什麼？</p>



<p class="wp-block-paragraph">下手之前，你可以先問：</p>



<p class="wp-block-paragraph">1. 連續兩個月是相鄰日曆月，還是兩次購買相隔 30 天？</p>



<p class="wp-block-paragraph">2. 結果要列出每一組相鄰月份，還是只要顧客名單？</p>



<p class="wp-block-paragraph">3. 同一個月買很多次，是否只計算一次活躍？</p>



<p class="wp-block-paragraph">假設只要找出曾在相鄰日曆月完成購買的顧客，每位顧客只出現一次。先將資料整理成每位顧客每月一列。</p>



<pre class="wp-block-code"><code>WITH clean_orders AS (
    SELECT
        order_id
        , customer_id
        , CAST(DATE_PARSE(CAST(order_date AS VARCHAR), '%Y%m%d') AS DATE) AS order_dt
        , total_amount
    FROM orders
    WHERE order_status = 'completed'
),
customer_months AS (
    SELECT DISTINCT
        customer_id
        , DATE_TRUNC('month', order_dt) AS order_month
    FROM clean_orders
), compared AS (
    SELECT
        *
        , LAG(order_month) OVER (
            PARTITION BY customer_id ORDER BY order_month
        ) AS previous_month
    FROM customer_months
)
SELECT DISTINCT
    customer_id
FROM compared
WHERE order_month = DATE_ADD('month', 1, previous_month)
ORDER BY customer_id;</code></pre>



<p class="wp-block-paragraph">DISTINCT 先把同月多張訂單收斂成一次月活躍，LAG 才是在比較相鄰的購買月份。最後仍然要檢查相差一個月，因為上一筆有購買的月份也可能是三個月前。</p>



<p class="wp-block-paragraph">1 月 31 日與 2 月 1 日各買一次，符合這題；1 月 1 日與 1 月 30 日各買一次則不符合。若想知道是哪些月份連續購買，可將最後的欄位改成 customer_id、previous_month、order_month，並保留每一組結果。</p>



<h2 class="wp-block-heading"><strong>第 8 題：如何將顧客依消費金額分成 5 組？</strong></h2>



<p class="wp-block-paragraph">行銷同事想把顧客分成五組，安排不同的溝通方式。你可能想到 NTILE(5)，但他要的是每組人數差不多，還是每組營收差不多？這兩件事可不一樣。</p>



<p class="wp-block-paragraph">下手之前，你可以先問：</p>



<p class="wp-block-paragraph">1. 分群依照歷史消費，還是最近半年？</p>



<p class="wp-block-paragraph">2. 同金額顧客可以分到不同組嗎？</p>



<p class="wp-block-paragraph">3. 沒有購買的會員是否也要分組？</p>



<p class="wp-block-paragraph">4. 這個分群要用於發優惠券，還是只是觀察消費分布？</p>



<p class="wp-block-paragraph">假設針對 2025 年上半年有完成訂單的顧客，依總消費分成五個人數盡量接近的組；接受同額顧客被分開，並以 customer_id 固定排序。</p>



<pre class="wp-block-code"><code>WITH clean_orders AS (
    SELECT
        order_id
        , customer_id
        , CAST(DATE_PARSE(CAST(order_date AS VARCHAR), '%Y%m%d') AS DATE) AS order_dt
        , total_amount
    FROM orders
    WHERE order_status = 'completed'
),
customer_spend AS (
    SELECT
        customer_id
        , SUM(total_amount) AS total_spend
    FROM clean_orders
    WHERE order_dt &gt;= DATE '2025-01-01' AND order_dt &lt; DATE '2025-07-01'
    GROUP BY customer_id
)
SELECT
    customer_id
    , total_spend
    , NTILE(5) OVER (ORDER BY total_spend DESC, customer_id) AS spend_group
FROM customer_spend
ORDER BY spend_group, total_spend DESC, customer_id;</code></pre>



<p class="wp-block-paragraph">第 1 組是消費較高的顧客，但不代表它剛好貢獻 20% 營收。NTILE 主要控制每組人數，總人數無法整除時，各組人數最多差一人；如果只有三位顧客，也不會憑空產生五個都有人的組別。</p>



<p class="wp-block-paragraph">假設有 10 位顧客，每組會有 2 人，但第一組可能就貢獻一半營收。如果同額顧客收到不同優惠會造成困擾，就應先討論固定金額門檻或同分處理方式，不能只因為 NTILE 寫起來方便就直接使用。</p>



<h2 class="wp-block-heading"><strong>第 9 題：如何計算新客與舊客的月營收？</strong></h2>



<p class="wp-block-paragraph">如果想知道營收成長來自新客還是舊客，只把第一張訂單標成新客訂單就好了嗎？先想一下：顧客在首購當月買了三次，後面兩張要算哪一邊？</p>



<p class="wp-block-paragraph">下手之前，你可以先問：</p>



<p class="wp-block-paragraph">1. 新客是當月註冊，還是當月第一次完成購買？</p>



<p class="wp-block-paragraph">2. 首購當月的所有訂單都算新客營收，還是只算第一張？</p>



<p class="wp-block-paragraph">3. 是否有完整歷史可以辨認真正的首購月份？</p>



<p class="wp-block-paragraph">假設新客定義為當月首購的顧客，首購當月所有完成訂單都歸入新客營收，之後月份才算舊客。我們展示 2025 年上半年，但先用完整歷史找首購。</p>



<pre class="wp-block-code"><code>WITH clean_orders AS (
    SELECT
        order_id
        , customer_id
        , CAST(DATE_PARSE(CAST(order_date AS VARCHAR), '%Y%m%d') AS DATE) AS order_dt
        , total_amount
    FROM orders
    WHERE order_status = 'completed'
),
first_purchase AS (
    SELECT
        customer_id
        , DATE_TRUNC('month', MIN(order_dt)) AS first_month
    FROM clean_orders GROUP BY customer_id
), labeled AS (
    SELECT
        DATE_TRUNC('month', o.order_dt) AS order_month
        , o.customer_id
        , o.total_amount
        , CASE WHEN DATE_TRUNC('month', o.order_dt) = f.first_month
                    THEN 'New' ELSE 'Existing' END AS customer_type
    FROM clean_orders o JOIN first_purchase f ON o.customer_id = f.customer_id
    WHERE o.order_dt &gt;= DATE '2025-01-01' AND o.order_dt &lt; DATE '2025-07-01'
)
SELECT
    order_month
    , customer_type
    , COUNT(DISTINCT customer_id) AS purchasing_customers
    , SUM(total_amount) AS revenue
FROM labeled
GROUP BY 1, 2
ORDER BY 1, 2;</code></pre>



<p class="wp-block-paragraph">first_purchase 每位顧客只有一列，因此接回訂單時不會因為多筆首購資料而放大營收。這題的分類單位是「顧客在某個月的身分」，和上集逐張標記首購、回購訂單的邏輯不同。</p>



<p class="wp-block-paragraph">例如顧客 1 月首購 100 元、1 月再買 200 元、2 月買 300 元，1 月新客營收是 300 元，2 月舊客營收是 300 元。這份結果只列有訂單的月份與類別；報表若需要零值列，還要補上月份與 New／Existing 的組合。</p>



<h2 class="wp-block-heading"><strong>第 10 題：如何建立 Cohort Retention Table？</strong></h2>



<p class="wp-block-paragraph">公司想知道「1 月來的新客，到了 2 月還有多少人回來？」這時候可以使用 Cohort。不過，回來是指登入、開信，還是真的又買了一次？如果只拿到訂單表，我們能回答的範圍也要先說清楚。</p>



<p class="wp-block-paragraph">下手之前，你可以先問：</p>



<p class="wp-block-paragraph">1. Cohort 依註冊月還是首購月分組？</p>



<p class="wp-block-paragraph">2. 留存代表有完成購買，還是任何活躍行為？</p>



<p class="wp-block-paragraph">3. 中間一個月沒買，下一個月回來是否仍算該月留存？</p>



<p class="wp-block-paragraph">4. 哪些月份已完整觀察？尚未發生的月份應該留白，還是填 0？</p>



<p class="wp-block-paragraph">假設以首購月分群，後續某月有完成訂單就算該月購買留存，不要求每月連續購買。資料完整到 2025 年 6 月 30 日，展示 2025 年上半年首購的 Cohort，只產生已完整觀察的月份。</p>



<pre class="wp-block-code"><code>WITH clean_orders AS (
    SELECT
        order_id
        , customer_id
        , CAST(DATE_PARSE(CAST(order_date AS VARCHAR), '%Y%m%d') AS DATE) AS order_dt
        , total_amount
    FROM orders
    WHERE order_status = 'completed'
),
params AS (
    SELECT
        DATE '2025-06-01' AS last_complete_month
),
observed_orders AS (
    SELECT
        o.*
    FROM clean_orders o CROSS JOIN params p
    WHERE o.order_dt &lt; DATE_ADD('month', 1, p.last_complete_month)
), first_purchase AS (
    SELECT
        customer_id
        , DATE_TRUNC('month', MIN(order_dt)) AS cohort_month
    FROM observed_orders GROUP BY customer_id
), cohort_sizes AS (
    SELECT
        cohort_month
        , COUNT(*) AS cohort_size
    FROM first_purchase
    WHERE cohort_month &gt;= DATE '2025-01-01'
    GROUP BY cohort_month
), customer_months AS (
    SELECT DISTINCT
        customer_id
        , DATE_TRUNC('month', order_dt) AS active_month
    FROM observed_orders
), activity AS (
    SELECT
        f.cohort_month
        , m.active_month
        , COUNT(*) AS active_customers
    FROM first_purchase f JOIN customer_months m ON f.customer_id = m.customer_id
    GROUP BY 1, 2
), grid AS (
    SELECT
        s.cohort_month
        , s.cohort_size
        , t.active_month
    FROM cohort_sizes s CROSS JOIN params p
    CROSS JOIN UNNEST(SEQUENCE(s.cohort_month, p.last_complete_month, INTERVAL '1' MONTH)) AS t(active_month)
)
SELECT
    g.cohort_month
    , DATE_DIFF('month', g.cohort_month, g.active_month) AS month_number
    , g.cohort_size
    , COALESCE(a.active_customers, 0) AS active_customers
    , ROUND(100.0 * COALESCE(a.active_customers, 0) / NULLIF(g.cohort_size, 0), 2) AS retention_pct
FROM grid g LEFT JOIN activity a
  ON g.cohort_month = a.cohort_month AND g.active_month = a.active_month
ORDER BY 1, 2;</code></pre>



<p class="wp-block-paragraph">先找首購月、計算固定的 Cohort 人數，再把訂單去重成每位顧客每月一列。grid 會產生已經觀察完的月份組合，所以當月沒有人回購時可以填 0；尚未走到的月份則沒有資料列，做成樞紐表時應留白。這份 Query 輸出的是長表，可以再用報表工具把 month_number 展開成欄位。</p>



<p class="wp-block-paragraph">例如 1 月 Cohort 有 100 人，2 月 20 人購買，Month 1 就是 20%。6 月 Cohort 目前只有 Month 0，不應把 Month 1 填成 0%。因為我們定義的是各月購買留存，顧客可以隔月再回來，留存率也不一定逐月下降；它同樣不是「首購後 30 天內回購率」。</p>



<h2 class="wp-block-heading"><strong>寫完 Query，再問自己結果能不能回答問題</strong></h2>



<p class="wp-block-paragraph">回購率要看觀察期，連續購買要先定義月份，顧客分群要考慮用途，新舊客營收要分清楚顧客身分與訂單次序，Cohort 則要區分沒有回來和還沒觀察到。這些問題確認清楚，SQL 才有明確的計算方向。</p>



<p class="wp-block-paragraph">面試時，你可以試著這樣回答：「我會先確認回購的定義和資料截止日，再找出完整歷史中的首購，讓分母只包含已滿觀察期的顧客。最後檢查同日第二張訂單與第 30 天的邊界，確保結果符合剛才約定的規則。」</p>



<p class="wp-block-paragraph">看完答案後，別忘了自己動手改一個條件。例如同日不算回購、排名要保留同分，或首購當月只計第一張訂單。能說清楚哪些步驟需要改，才是真的理解這段 Query。</p>



<p class="wp-block-paragraph"><strong>系列閱讀：從基礎題到進階應用</strong></p>



<p class="wp-block-paragraph"><a href="https://aderlab.com/data-analytics/sql-interview-questions-for-beginner-data-analysts/">SQL 面試題入門：數據分析師必會的 10 道基礎題 (上)</a></p>



<p class="wp-block-paragraph"><a href="https://aderlab.com/data-analytics/sql-interview-questions-for-beginner-data-analysts-part-2/">SQL 面試題入門：數據分析師必會的 10 道基礎題 (下)</a></p>



<p class="wp-block-paragraph"><a href="https://aderlab.com/data-analytics/sql-interview-advanced-part-one/">SQL 面試題進階：CTE、Window Function 與 10 道常見練習題（上）</a></p>



<p class="wp-block-paragraph">SQL 面試題進階：CTE、Window Function 與 10 道常見練習題（下）(本篇)</p>



<h2 class="wp-block-heading">想繼續練習更多電商 SQL 面試題嗎？</h2>



<p class="wp-block-paragraph">如果你已經完成上面的題目，接下來可以試著挑戰更多貼近實際工作情境的 SQL 題目。</p>



<p class="wp-block-paragraph">我整理了一份《<a href="https://buymeacoffee.com/aderlabsharon/e/572913">電商產業 SQL 面試實戰題庫</a>》，收錄 24 道電商商業案例，涵蓋付款失敗率、取消與退款、實際營收、新舊客、回購率、商品表現、MoM、QoQ、優惠券成效與購物轉換漏斗。</p>



<p class="wp-block-paragraph">每一道題目都會提供資料表與欄位，讓你先練習釐清商業問題、拆解查詢步驟，再對照 Athena SQL 與 MySQL 8.0 的參考答案，這裏購買：<a href="https://buymeacoffee.com/aderlabsharon/e/572913">https://buymeacoffee.com/aderlabsharon/e/572913</a></p>



<p class="wp-block-paragraph">最後也提供讀者專屬折扣碼：BLOG，結帳時輸入折扣碼即可享有8折優惠～</p>



<h2 class="wp-block-heading"><strong>SQL 語法參考</strong></h2>



<p class="wp-block-paragraph">日期與視窗函數可參考 <a href="https://docs.aws.amazon.com/athena/latest/ug/functions-env3.html">Athena engine version 3 官方文件</a>、<a href="https://trino.io/docs/current/functions/window.html">Window functions</a> 與 <a href="https://trino.io/docs/current/functions/datetime.html">日期函數說明</a>。不同資料庫的日期語法可能不同，練習時請先確認使用的環境。</p>



<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide"/>



<p class="has-medium-font-size wp-block-paragraph"><strong>Buy me a coffee　用行動支持我的內容創作</strong></p>



<p class="wp-block-paragraph"><em>如果文章對你有幫助，歡迎用小額贊助支持 Sharon 持續分享數據分析實務。</em></p>



<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="wp-block-button aligncenter is-style-fill"><a class="wp-block-button__link has-black-color has-luminous-vivid-amber-background-color has-text-color has-background wp-element-button" href="https://www.buymeacoffee.com/aderlabsharon" target="_blank" rel="noreferrer noopener">以小額贊助支持 Sharon</a></div>
</div>
</div></div>
<p>這篇文章 <a href="https://aderlab.com/data-analytics/sql-interview-advanced-part-two/">SQL 面試題進階：CTE、Window Function 與 10 道常見練習題（下）</a> 最早出現於 <a href="https://aderlab.com">Sharon Lab∣雪倫實驗室</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://aderlab.com/data-analytics/sql-interview-advanced-part-two/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5704</post-id>	</item>
		<item>
		<title>SQL 面試題進階：CTE、Window Function 與 10 道常見練習題（上）</title>
		<link>https://aderlab.com/data-analytics/sql-interview-advanced-part-one/</link>
					<comments>https://aderlab.com/data-analytics/sql-interview-advanced-part-one/#respond</comments>
		
		<dc:creator><![CDATA[Sharon]]></dc:creator>
		<pubDate>Thu, 17 Sep 2026 08:37:26 +0000</pubDate>
				<category><![CDATA[SQL]]></category>
		<category><![CDATA[數據分析]]></category>
		<category><![CDATA[SQL面試題]]></category>
		<category><![CDATA[數據分析師面試]]></category>
		<guid isPermaLink="false">https://aderlab.com/?p=5596</guid>

					<description><![CDATA[<p>從月營收、累積消費到顧客排名，透過五道 Athena SQL 題目，練習先確認商業定義，再用 CTE 與 Window Function 拆解問題。</p>
<p>這篇文章 <a href="https://aderlab.com/data-analytics/sql-interview-advanced-part-one/">SQL 面試題進階：CTE、Window Function 與 10 道常見練習題（上）</a> 最早出現於 <a href="https://aderlab.com">Sharon Lab∣雪倫實驗室</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-group aderlab-article"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<p class="wp-block-paragraph">如果你看過 <a href="https://aderlab.com/data-analytics/sql-interview-questions-for-beginner-data-analysts/">SQL 面試題入門：數據分析師必會的 10 道基礎題 (上) </a>或 <a href="https://aderlab.com/data-analytics/sql-interview-questions-for-beginner-data-analysts-part-2/">SQL 面試題入門：數據分析師必會的 10 道基礎題（下）</a>，應該已經發現，看到題目先別急著寫 Query。先確認商業問題、資料格式與指標定義，往往比多背幾個函數更重要。</p>



<p class="wp-block-paragraph">到了進階題，這個習慣一樣適用。只是我們開始需要把問題拆成幾個步驟，處理累積消費、排名、回購與留存，這個系列保留 10 道練習題，分成上下兩篇，這篇先練習五題，包括月營收成長率、累積消費、購買間隔、每月前三位顧客，以及首購與回購訂單。</p>



<h2 class="wp-block-heading"><strong>練習使用的資料表與共同假設</strong></h2>



<p class="wp-block-paragraph">SQL 延續入門篇，使用 Amazon Athena engine version 3 語法。orders 包含 order_id、customer_id、order_date、order_status、total_amount；order_date 是 YYYYMMDD 整數，例如 20250831，需要先轉成 DATE。</p>



<p class="wp-block-paragraph">以下假設一列就是一張訂單，order_id 唯一，customer_id 與日期沒有缺漏，日期也都是有效值；completed 代表納入分析的完成訂單。total_amount 是已確認可加總、非 NULL 的最終金額，折扣、退款與運費處理一致，且已統一幣別。這些是假設，實務上要先和面試官確認，不能只靠欄位名稱猜測。</p>



<p class="wp-block-paragraph">每題都附上 clean_orders，讓你可以各自複製整段 SQL 練習。它只處理訂單狀態與日期轉換，並不會自動解決重複資料、退款或異常日期。若原始資料是商品明細，請先整理成每張訂單一列；如果歷史不完整，首購相關結果只能稱為「可觀察資料中的首購」。</p>



<h2 class="wp-block-heading"><strong>先認識 CTE 與 Window Function 在幫你做什麼</strong></h2>



<p class="wp-block-paragraph">當 Query 越寫越長，你是不是也會開始忘記內層到底算了什麼？CTE 就是用 WITH 幫一段查詢結果取名字，讓後面的步驟接著使用。例如先整理訂單，再計算月營收，最後比較上月，閱讀起來就能對上自己的解題順序。CTE 的用途是整理邏輯，不代表一定會建立實體暫存表，也不保證查詢會更快。</p>



<p class="wp-block-paragraph">Window Function 則適合「保留目前這一列，同時參考其他列」。例如保留訂單明細，但在旁邊加上顧客累積消費。OVER 裡的 PARTITION BY 決定分組範圍，ORDER BY 決定視窗計算順序，ROWS 可進一步指定累計範圍，最後輸出的排序，仍然要靠最外層 ORDER BY。</p>



<h2 class="wp-block-heading"><strong>第 1 題：如何計算每月營收的 MoM 成長率？</strong></h2>



<p class="wp-block-paragraph">看到月成長率，你是不是會想到先算每月營收，再拿這個月減掉上個月，除以上個月？方向沒有錯，但 SQL 裡的「上一列」，真的就是我們想比較的「上個月」嗎？</p>



<p class="wp-block-paragraph">下手之前，你可以先問：</p>



<p class="wp-block-paragraph">1. 要比較完整月份，還是本月截至今天？</p>



<p class="wp-block-paragraph">2. 兩個月的觀察天數是否一致？如果不一樣，是否要改成比較 daily營收</p>



<p class="wp-block-paragraph">假設資料已完整入庫，沒有訂單就代表零營收。我們比較 2025 年 1～6 月的完整月份，額外讀入 2024 年 12 月作為 1 月的比較基準。</p>



<pre class="wp-block-code"><code>WITH clean_orders AS (
    SELECT
        order_id
        , customer_id
        , CAST(DATE_PARSE(CAST(order_date AS VARCHAR), '%Y%m%d') AS DATE) AS order_dt
        , total_amount
    FROM orders
    WHERE order_status = 'completed'
),

months AS (
    SELECT
        order_month
    FROM UNNEST(SEQUENCE(DATE '2024-12-01', DATE '2025-06-01', INTERVAL '1' MONTH)) AS t(order_month)
), 

monthly_revenue AS (
    SELECT
        DATE_TRUNC('month', order_dt) AS order_month
        , SUM(total_amount) AS revenue
    FROM clean_orders
    WHERE order_dt &gt;= DATE '2024-12-01' AND order_dt &lt; DATE '2025-07-01'
    GROUP BY 1
), 

filled AS (
    SELECT
        m.order_month
        , COALESCE(r.revenue, 0) AS revenue
    FROM months m LEFT JOIN monthly_revenue r ON m.order_month = r.order_month
), 

compared AS (
    SELECT
        *
        , LAG(revenue) OVER (ORDER BY order_month) AS previous_revenue
    FROM filled
)

SELECT
    order_month
    , revenue
    , previous_revenue
    , ROUND(100.0 * (revenue - previous_revenue) / NULLIF(previous_revenue, 0), 2) AS mom_pct
FROM compared
WHERE order_month &gt;= DATE '2025-01-01'
ORDER BY order_month;</code></pre>



<p class="wp-block-paragraph">先建立月份清單，再補上營收，LAG 才能對到上一個日曆月。最後才篩選展示期間，才能保留 1 月需要用到的 12 月資料。NULLIF 則讓上月營收為 0 時回傳 NULL，因為這時候一般百分比成長率沒有定義。</p>



<p class="wp-block-paragraph">你可以用小例子檢查：1 月 100 元、2 月沒有訂單、3 月 150 元，3 月應該與 2 月的 0 元比較，結果是 NULL，不能跳過 2 月算成成長 50%。如果缺月是資料遺漏，也不能直接補 0。</p>



<h2 class="wp-block-heading"><strong>第 2 題：如何計算每位顧客的累積消費？</strong></h2>



<p class="wp-block-paragraph">如果公司想看顧客在哪一筆訂單達到 VIP 門檻，只用 GROUP BY 算出每個人的總消費，夠不夠呢？我們還需要保留每一張訂單，才能看到消費是怎麼累積上去的。</p>



<p class="wp-block-paragraph">下手之前，你可以先問：</p>



<p class="wp-block-paragraph">1. 要看歷史累積，還是今年重新起算？</p>



<p class="wp-block-paragraph">2. 同一天有兩張訂單時，要逐筆累加，還是只看每天結束時的金額？</p>



<p class="wp-block-paragraph">假設要看全部歷史的逐筆累積；目前只有日期，因此同日訂單用唯一的 order_id 固定排列。這能讓結果一致，但不代表同日的實際先後。</p>



<pre class="wp-block-code"><code>WITH clean_orders AS (
    SELECT
        order_id
        , customer_id
        , CAST(DATE_PARSE(CAST(order_date AS VARCHAR), '%Y%m%d') AS DATE) AS order_dt
        , total_amount
    FROM orders
    WHERE order_status = 'completed'
)

SELECT
    customer_id
    , order_dt
    , order_id
    , total_amount
    , SUM(total_amount) OVER (
        PARTITION BY customer_id ORDER BY order_dt, order_id
        ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
    ) AS cumulative_spend
FROM clean_orders
ORDER BY customer_id, order_dt, order_id;</code></pre>



<p class="wp-block-paragraph">PARTITION BY 讓每位顧客各自計算，ORDER BY 決定累積順序，ROWS 則明確指定從第一列加到目前這一列。發現了嗎？Window Function 可以計算合計，同時保留訂單明細，這就是它和 GROUP BY 很實用的差別。</p>



<p class="wp-block-paragraph">假設同一位顧客依序消費 500、300、200 元，累積結果就是 500、800、1,000 元。如果要判斷真實的第幾次購買達標，就要取得交易 timestamp；若只關心每日累積，應先彙總到顧客與日期。</p>



<h2 class="wp-block-heading"><strong>第 3 題：如何計算前後兩次購買的間隔？</strong></h2>



<p class="wp-block-paragraph">行銷同事想知道顧客大約多久會再買一次，你可能會想到用 LAG 找上一筆訂單日期。不過，兩張訂單和兩次購物行為，一定是同一件事嗎？</p>



<p class="wp-block-paragraph">下手之前，你可以先問：</p>



<p class="wp-block-paragraph">1. 同一天拆成兩張訂單，要算兩次購買嗎？</p>



<p class="wp-block-paragraph">2. 間隔以日曆天、完整 24 小時，還是工作天計算？</p>



<p class="wp-block-paragraph">3. 第一次購買沒有上一筆，應保留 NULL 還是排除？</p>



<p class="wp-block-paragraph">假設一張完成訂單算一次購買，使用日曆天差；同日購買的間隔就是 0 天，第一次購買則保留 NULL。</p>



<pre class="wp-block-code"><code>WITH clean_orders AS (
    SELECT
        order_id
        , customer_id
        , CAST(DATE_PARSE(CAST(order_date AS VARCHAR), '%Y%m%d') AS DATE) AS order_dt
        , total_amount
    FROM orders
    WHERE order_status = 'completed'
),

previous_orders AS (
    SELECT
        customer_id
        , order_id
        , order_dt
        , LAG(order_dt) OVER (PARTITION BY customer_id ORDER BY order_dt, order_id) AS previous_order_dt
    FROM clean_orders
)
SELECT
    *
    , DATE_DIFF('day', previous_order_dt, order_dt) AS interval_days
FROM previous_orders
ORDER BY customer_id, order_dt, order_id;</code></pre>



<p class="wp-block-paragraph">我們先在每位顧客內找上一張訂單，再使用 DATE_DIFF 計算天數。YYYYMMDD 整數不能直接相減當天數，所以前面的日期轉換在這裡就派上用場了。</p>



<p class="wp-block-paragraph">例如 1 月 31 日買一次，2 月 1 日再買一次，間隔是 1 天。第一次購買的 NULL 不應改成 0，否則會拉低平均間隔；而只有一次購買的人沒有可計算的間隔，也不能把這個平均值解讀成所有顧客的購買週期。</p>



<h2 class="wp-block-heading"><strong>第 4 題：如何找出每月消費最高的顧客？三種排名情境</strong></h2>



<p class="wp-block-paragraph">「前三名」看起來只是排名，但如果第三名有兩個人同分，你會留下誰？這時候選哪個排名函數，就不只是語法偏好了。下面把同一個商業問題拆成三個子題，練習 ROW_NUMBER、RANK 與 DENSE_RANK。</p>



<p class="wp-block-paragraph">下手之前，先確認：公司一定只能發出 3 份獎品，還是同分顧客都要保留？排名依照單筆最大訂單，還是每月總消費？同分時有沒有指定第二個排序條件？這些答案會直接影響最後選出哪些顧客。</p>



<p class="wp-block-paragraph">以下三題都使用 orders 資料表，只計算 order_status = &#8216;completed&#8217; 的訂單，並先彙總成「每月每位顧客一列」。假設 order_date 是 YYYYMMDD 格式的整數或字串，例如 20250101；月消費總額以 total_amount 加總。實務上也要先確認退款、折扣與運費是否已反映在金額中，以及訂單是否有重複資料。</p>



<h3 class="wp-block-heading">4-1：每月最多選 3 位顧客發送禮品（ROW_NUMBER）</h3>



<p class="wp-block-paragraph"><strong>題目：</strong>公司每月最多提供 3 份禮品，要送給當月總消費最高的顧客。請找出每月獲獎名單；消費金額相同時，優先選擇 customer_id 較小的顧客。每月最多選 3 位，不足 3 位時全部保留。輸出月份、顧客 ID、月消費總額與序號。</p>



<p class="wp-block-paragraph">既然禮品數量有限，就需要讓每位顧客取得唯一的序號。ROW_NUMBER 搭配 revenue DESC、customer_id ASC，可以依消費金額排序，再用顧客 ID 決定同額顧客的先後。</p>



<pre class="wp-block-code"><code>WITH clean_orders AS (
    SELECT
        order_id
        , customer_id
        , CAST(DATE_PARSE(CAST(order_date AS VARCHAR), '%Y%m%d') AS DATE) AS order_dt
        , total_amount
    FROM orders
    WHERE order_status = 'completed'
), monthly_spend AS (
    SELECT
        DATE_TRUNC('month', order_dt) AS order_month
        , customer_id
        , SUM(total_amount) AS revenue
    FROM clean_orders
    GROUP BY 1, 2
), ranked AS (
    SELECT
        *
        , ROW_NUMBER() OVER (
            PARTITION BY order_month
            ORDER BY revenue DESC, customer_id ASC
        ) AS rn
    FROM monthly_spend
)
SELECT
    order_month
    , customer_id
    , revenue
    , rn
FROM ranked
WHERE rn &lt;= 3
ORDER BY order_month, rn, customer_id;</code></pre>



<p class="wp-block-paragraph">ROW_NUMBER 不會產生並列序號。即使第三位與第四位消費金額相同，也只會留下序號 3 的顧客；這就是為什麼必須先約定同額時的選擇規則。</p>



<h3 class="wp-block-heading">4-2：每月競賽排名前三名，同分者都獲獎（RANK）</h3>



<p class="wp-block-paragraph"><strong>題目：</strong>公司依每月總消費金額舉辦排行榜，競賽排名在前三名的顧客都能獲獎。同額顧客並列，且並列會占用後續名次，例如兩人並列第二名，下一位就是第四名。請輸出月份、顧客 ID、月消費總額與競賽排名，保留排名小於或等於 3 的所有顧客。</p>



<p class="wp-block-paragraph">這次不限制獲獎人數，而是依競賽名次決定資格，因此使用 RANK。視窗內只依 revenue DESC 排序，才能讓同額顧客取得相同排名。</p>



<pre class="wp-block-code"><code>WITH clean_orders AS (
    SELECT
        order_id
        , customer_id
        , CAST(DATE_PARSE(CAST(order_date AS VARCHAR), '%Y%m%d') AS DATE) AS order_dt
        , total_amount
    FROM orders
    WHERE order_status = 'completed'
), monthly_spend AS (
    SELECT
        DATE_TRUNC('month', order_dt) AS order_month
        , customer_id
        , SUM(total_amount) AS revenue
    FROM clean_orders
    GROUP BY 1, 2
), ranked AS (
    SELECT
        *
        , RANK() OVER (
            PARTITION BY order_month
            ORDER BY revenue DESC
        ) AS spend_rank
    FROM monthly_spend
)
SELECT
    order_month
    , customer_id
    , revenue
    , spend_rank
FROM ranked
WHERE spend_rank &lt;= 3
ORDER BY order_month, spend_rank, customer_id;</code></pre>



<p class="wp-block-paragraph">如果金額是 100、90、80、80，名次會是 1、2、3、3，四位顧客都獲獎。如果金額是 100、90、90、80，名次則是 1、2、2、4，金額 80 的顧客就不會入選。</p>



<h3 class="wp-block-heading">4-3：找出每月前三個不同消費金額的所有顧客（DENSE_RANK）</h3>



<p class="wp-block-paragraph"><strong>題目：</strong>公司想研究高消費顧客，要找出每月最高的 3 個不同月消費總額，以及達到這些金額的所有顧客。同額顧客屬於同一級距，級距編號連續、不跳號；不足 3 個級距時全部保留。請輸出月份、顧客 ID、月消費總額與級距排名。</p>



<p class="wp-block-paragraph">這裡的級距指不同的月消費總額，不是自行設定的金額區間。使用 DENSE_RANK，相同金額取得相同排名，下一個不同金額的排名接著往下編，不會因並列人數而跳號。</p>



<pre class="wp-block-code"><code>WITH clean_orders AS (
    SELECT
        order_id
        , customer_id
        , CAST(DATE_PARSE(CAST(order_date AS VARCHAR), '%Y%m%d') AS DATE) AS order_dt
        , total_amount
    FROM orders
    WHERE order_status = 'completed'
), monthly_spend AS (
    SELECT
        DATE_TRUNC('month', order_dt) AS order_month
        , customer_id
        , SUM(total_amount) AS revenue
    FROM clean_orders
    GROUP BY 1, 2
), ranked AS (
    SELECT
        *
        , DENSE_RANK() OVER (
            PARTITION BY order_month
            ORDER BY revenue DESC
        ) AS spend_rank
    FROM monthly_spend
)
SELECT
    order_month
    , customer_id
    , revenue
    , spend_rank
FROM ranked
WHERE spend_rank &lt;= 3
ORDER BY order_month, spend_rank, customer_id;</code></pre>



<p class="wp-block-paragraph">如果金額是 100、90、90、80，級距排名會是 1、2、2、3。因此 DENSE_RANK 小於或等於 3 會保留四位顧客，代表選出前三種金額的所有顧客。</p>



<h3 class="wp-block-heading">放在一起比較：前三位、競賽前三名、前三種金額</h3>



<p class="wp-block-paragraph">用同一月份的五位顧客來驗證。假設 customer_id 依序為 A、B、C、D、E，月消費總額分別是 100、90、90、80、70：</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>顧客</th><th>月消費總額</th><th>ROW_NUMBER</th><th>RANK</th><th>DENSE_RANK</th></tr></thead><tbody><tr><td>A</td><td>100</td><td>1</td><td>1</td><td>1</td></tr><tr><td>B</td><td>90</td><td>2</td><td>2</td><td>2</td></tr><tr><td>C</td><td>90</td><td>3</td><td>2</td><td>2</td></tr><tr><td>D</td><td>80</td><td>4</td><td>4</td><td>3</td></tr><tr><td>E</td><td>70</td><td>5</td><td>5</td><td>4</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">篩選排名小於或等於 3 時，ROW_NUMBER 與 RANK 在這組資料都選出 A、B、C；DENSE_RANK 則選出 A、B、C、D。前兩者這次剛好選到相同的人，不代表規則相同；把金額換成 100、90、80、80、70，就會看到 ROW_NUMBER 選出 3 人，RANK 選出 4 人。</p>



<p class="wp-block-paragraph">三題都先在 ranked CTE 算好排名，再到外層 WHERE 篩選。使用 RANK 或 DENSE_RANK 保留同分者時，不要把 customer_id 加進視窗內的 ORDER BY，否則同額顧客會被拆成不同名次。最外層的 ORDER BY 可以加入 customer_id，因為它只決定結果的顯示順序，不會改變已算好的排名。</p>



<h2 class="wp-block-heading"><strong>第 5 題：如何區分首購與回購訂單？</strong></h2>



<p class="wp-block-paragraph">看到首購，你可能會想：把每個人的訂單依時間排序，第一張就是首購。可是，如果手上的資料只剩最近一年，這張「第一張」真的就是顧客人生中的第一筆訂單嗎？</p>



<p class="wp-block-paragraph">下手之前，你可以先問：</p>



<p class="wp-block-paragraph">1. 首購指第一張完成訂單，還是第一次付款？退款後是否重新認定？</p>



<p class="wp-block-paragraph">2. 資料是否涵蓋完整歷史？是否有舊系統或其他通路的訂單？</p>



<p class="wp-block-paragraph">3. 同日多張訂單要只標一張首購，還是整個首購日都算？</p>



<p class="wp-block-paragraph">假設有完整歷史，一張完成訂單就是一次購買；只標記一張首購，同日以 order_id 作為固定的判定規則。</p>



<pre class="wp-block-code"><code>WITH clean_orders AS (
    SELECT
        order_id
        , customer_id
        , CAST(DATE_PARSE(CAST(order_date AS VARCHAR), '%Y%m%d') AS DATE) AS order_dt
        , total_amount
    FROM orders
    WHERE order_status = 'completed'
),
ranked_orders AS (
    SELECT
        *
        , ROW_NUMBER() OVER (
            PARTITION BY customer_id ORDER BY order_dt, order_id
        ) AS order_sequence
    FROM clean_orders
)
SELECT
    order_id
    , customer_id
    , order_dt
    , CASE WHEN order_sequence = 1 THEN 'First Purchase'
    ELSE 'Repeat Purchase' END AS purchase_type
FROM ranked_orders
ORDER BY customer_id, order_dt, order_id;</code></pre>



<p class="wp-block-paragraph">如果只想看 2025 年的首購與回購訂單，應該先在完整歷史上排名，再在最外層加上日期條件。如果先把舊訂單切掉，老顧客今年的第一張訂單，就會被誤判成首購。</p>



<p class="wp-block-paragraph">假設顧客在 2024 年已經買過，2025 年又買一次，2025 年那張仍然是回購。只有日期時，我們採用的是明確約定的同日規則；如果業務要精確找出第一筆付款，還是需要付款時間。</p>



<h2 class="wp-block-heading"><strong>練習時，試著把你的判斷說出來</strong></h2>



<p class="wp-block-paragraph">這五題分別用了 LAG、SUM OVER 與排名函數，但真正會改變答案的，是缺月怎麼處理、累積從哪裡開始、同分要不要保留，以及首購歷史是否完整。你可以先遮住答案，練習把需要確認的問題說出來，再一步步寫 Query。</p>



<p class="wp-block-paragraph">下一篇接著練習第 6～10 題，把這些方法放進 30 天回購率、連續購買、顧客分群、新舊客營收與 Cohort 留存分析。</p>



<p class="wp-block-paragraph"><strong>系列閱讀：從基礎題到進階應用</strong></p>



<p class="wp-block-paragraph"><a href="https://aderlab.com/data-analytics/sql-interview-questions-for-beginner-data-analysts/">SQL 面試題入門：數據分析師必會的 10 道基礎題 (上)</a></p>



<p class="wp-block-paragraph"><a href="https://aderlab.com/data-analytics/sql-interview-questions-for-beginner-data-analysts-part-2/">SQL 面試題入門：數據分析師必會的 10 道基礎題 (下)</a></p>



<p class="wp-block-paragraph">SQL 面試題進階：CTE、Window Function 與 10 道常見練習題（上）(本篇)</p>



<p class="wp-block-paragraph"><a href="https://aderlab.com/?p=5704">SQL 面試題進階：CTE、Window Function 與 10 道常見練習題（下）</a></p>



<h2 class="wp-block-heading"><strong>SQL 語法參考</strong></h2>



<p class="wp-block-paragraph">日期與視窗函數可參考 <a href="https://docs.aws.amazon.com/athena/latest/ug/functions-env3.html">Athena engine version 3 官方文件</a>、<a href="https://trino.io/docs/current/functions/window.html">Window functions</a> 與 <a href="https://trino.io/docs/current/functions/datetime.html">日期函數說明</a>。不同資料庫的日期語法可能不同，練習時請先確認使用的環境。</p>



<h2 class="wp-block-heading">想繼續練習更多電商 SQL 面試題嗎？</h2>



<p class="wp-block-paragraph">如果你已經完成上面的題目，接下來可以試著挑戰更多貼近實際工作情境的 SQL 題目。</p>



<p class="wp-block-paragraph">我整理了一份《<a href="https://buymeacoffee.com/aderlabsharon/e/572913">電商產業 SQL 面試實戰題庫</a>》，收錄 24 道電商商業案例，涵蓋付款失敗率、取消與退款、實際營收、新舊客、回購率、商品表現、MoM、QoQ、優惠券成效與購物轉換漏斗。</p>



<p class="wp-block-paragraph">每一道題目都會提供資料表與欄位，讓你先練習釐清商業問題、拆解查詢步驟，再對照 Athena SQL 與 MySQL 8.0 的參考答案，這裏購買：<a href="https://buymeacoffee.com/aderlabsharon/e/572913">https://buymeacoffee.com/aderlabsharon/e/572913</a></p>



<p class="wp-block-paragraph">最後也提供讀者專屬折扣碼：BLOG，結帳時輸入折扣碼即可享有8折優惠～</p>



<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide"/>



<p class="has-medium-font-size wp-block-paragraph"><strong>Buy me a coffee　用行動支持我的內容創作</strong></p>



<p class="wp-block-paragraph"><em>如果文章對你有幫助，歡迎用小額贊助支持 Sharon 持續分享數據分析實務。</em></p>



<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="wp-block-button aligncenter is-style-fill"><a class="wp-block-button__link has-black-color has-luminous-vivid-amber-background-color has-text-color has-background wp-element-button" href="https://www.buymeacoffee.com/aderlabsharon" target="_blank" rel="noreferrer noopener">以小額贊助支持 Sharon</a></div>
</div>
</div></div>
<p>這篇文章 <a href="https://aderlab.com/data-analytics/sql-interview-advanced-part-one/">SQL 面試題進階：CTE、Window Function 與 10 道常見練習題（上）</a> 最早出現於 <a href="https://aderlab.com">Sharon Lab∣雪倫實驗室</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://aderlab.com/data-analytics/sql-interview-advanced-part-one/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5596</post-id>	</item>
		<item>
		<title>SQL 面試題入門：數據分析師必會的 10 道基礎題 (下)</title>
		<link>https://aderlab.com/data-analytics/sql-interview-questions-for-beginner-data-analysts-part-2/</link>
					<comments>https://aderlab.com/data-analytics/sql-interview-questions-for-beginner-data-analysts-part-2/#respond</comments>
		
		<dc:creator><![CDATA[Sharon]]></dc:creator>
		<pubDate>Sat, 05 Sep 2026 09:10:30 +0000</pubDate>
				<category><![CDATA[SQL]]></category>
		<category><![CDATA[數據分析]]></category>
		<category><![CDATA[SQL面試題]]></category>
		<category><![CDATA[數據分析師面試]]></category>
		<guid isPermaLink="false">https://aderlab.com/?p=5655</guid>

					<description><![CDATA[<p>延續 SQL 面試題入門上篇，透過五道基礎題練習日期處理、平均值、HAVING、跨表 JOIN 與 CASE WHEN，並學會先釐清商業問題再撰寫 Query。</p>
<p>這篇文章 <a href="https://aderlab.com/data-analytics/sql-interview-questions-for-beginner-data-analysts-part-2/">SQL 面試題入門：數據分析師必會的 10 道基礎題 (下)</a> 最早出現於 <a href="https://aderlab.com">Sharon Lab∣雪倫實驗室</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-group aderlab-article"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<p class="wp-block-paragraph">上一篇文章，我們從五道 SQL 基礎題開始，練習如何計算每月營收、找出高消費顧客、分析各國購買人數、找出從未下單的會員，以及計算不同訂單狀態的占比。</p>



<p class="wp-block-paragraph">如果你有看完上篇，應該已經發現，SQL 面試並不是看到題目就馬上開始寫 Query。真正重要的，是先確認商業問題、資料格式與指標定義，再決定查詢條件應該怎麼下。</p>



<p class="wp-block-paragraph">這篇文章接著分享第 6～10 題，會練習日期處理、平均值、HAVING、跨表 JOIN 與 CASE WHEN。SQL 範例延續上篇，以 Amazon Athena 語法為主。</p>



<script
  async
  src="https://forms.us.benchmarksend.com/assets/embed.js"
></script>
<div data-bme-form-id="Sa2H9AlkzKzgfRjRrWI8Q"></div>



<h2 class="wp-block-heading"><strong>練習使用的資料表</strong></h2>



<p class="wp-block-paragraph">我們同樣使用兩張簡化的電商資料表：</p>



<p class="wp-block-paragraph">customers 是客戶資料表，包含 customer_id、signup_date、country、acquisition_channel。</p>



<p class="wp-block-paragraph">orders 是訂單紀錄表，包含 order_id、customer_id、order_date、order_status、total_amount。其中 order_date 以 YYYYMMDD 的整數格式儲存，例如 20250831。</p>



<h2 class="wp-block-heading"><strong>第 6 題：如何找出每位顧客的第一次購買日期？</strong></h2>



<p class="wp-block-paragraph">看到「第一次購買日期」，你是不是會很直覺地想到：依照 customer_id 分組，再使用 MIN(order_date) 找出最早的日期？</p>



<pre class="wp-block-code"><code>SELECT
    customer_id,
    MIN(order_date) AS first_order_date
FROM orders
GROUP BY customer_id;</code></pre>



<p class="wp-block-paragraph">這個方向沒有錯，但先別急著把它當成最後答案。題目說的是「第一次購買」，而不是「第一次建立訂單」，兩者不一定是同一件事。</p>



<p class="wp-block-paragraph">下手之前，你可以先問：</p>



<p class="wp-block-paragraph">1. 第一次購買是第一次建立訂單、第一次付款成功，還是第一次完成訂單？取消或付款失敗的訂單要算嗎？</p>



<p class="wp-block-paragraph">2. order_date 的資料格式是什麼？如果它是 YYYYMMDD 的整數，能不能直接使用日期函數？</p>



<p class="wp-block-paragraph">3. 如果顧客完成訂單後又全額退款，這筆訂單還算他的第一次購買嗎？</p>



<p class="wp-block-paragraph">4. 同一位顧客是否可能有多個 customer_id？如果有，第一次購買日期要以帳號還是真實顧客為單位？</p>



<p class="wp-block-paragraph">假設面試官告訴你，第一次購買是指第一筆已完成的訂單，而且 order_date 是 YYYYMMDD 的整數格式，那麼在 Athena 中要先將整數轉成日期，再找出最小值：</p>



<pre class="wp-block-code"><code>SELECT
    customer_id,
    MIN(
        CAST(
            DATE_PARSE(CAST(order_date AS VARCHAR), '%Y%m%d')
            AS DATE
        )
    ) AS first_purchase_date
FROM orders
WHERE order_status = 'completed'
GROUP BY customer_id;</code></pre>



<p class="wp-block-paragraph">這題看似只是在考 MIN，其實也在測試你是否能分辨「下單」與「購買」的差異，以及能不能正確處理日期格式。</p>



<h2 class="wp-block-heading"><strong>第 7 題：如何計算每位顧客的平均訂單金額？</strong></h2>



<p class="wp-block-paragraph">平均訂單金額看起來很簡單，把 total_amount 放進 AVG() 不就好了嗎？</p>



<pre class="wp-block-code"><code>SELECT
    customer_id,
    AVG(total_amount) AS average_order_value
FROM orders
GROUP BY customer_id;</code></pre>



<p class="wp-block-paragraph">但平均值是 SQL 面試裡很容易出現陷阱的地方，因為你一定要先確認每一列資料代表什麼。</p>



<p class="wp-block-paragraph">你可以先問：</p>



<p class="wp-block-paragraph">1. orders 的一列就是一張訂單嗎？還是一張訂單中的一項商品？如果一張訂單有三項商品，會不會出現三列？</p>



<p class="wp-block-paragraph">2. 平均訂單金額只計算 completed 訂單嗎？取消、付款失敗與退款訂單要不要排除？</p>



<p class="wp-block-paragraph">3. total_amount 是整張訂單的最終金額，還是單項商品金額？是否已經扣除折扣與退款？</p>



<p class="wp-block-paragraph">4. 題目想看的是每位顧客自己的平均訂單金額，還是全公司的平均客單價？分析粒度不同，答案也會不同。</p>



<p class="wp-block-paragraph">假設一列就是一張訂單，total_amount 是最終訂單金額，而且只計算已完成的訂單，那麼可以寫成：</p>



<pre class="wp-block-code"><code>SELECT
    customer_id,
    COUNT(DISTINCT order_id) AS order_count,
    SUM(total_amount) AS total_spend,
    AVG(total_amount) AS average_order_value
FROM orders
WHERE order_status = 'completed'
GROUP BY customer_id;</code></pre>



<p class="wp-block-paragraph">除了平均訂單金額，我也會一起列出訂單數與累積消費金額。為什麼呢？因為平均消費 3,000 元的顧客，可能只買過一次，也可能已經買過十次。只看平均值，很容易忽略背後完全不同的顧客行為。</p>



<h2 class="wp-block-heading"><strong>第 8 題：如何找出購買超過 3 次的顧客？</strong></h2>



<p class="wp-block-paragraph">這一題常被拿來測試 WHERE 和 HAVING 的差別。很多人看到「超過 3 次」，第一個反應可能是把條件寫在 WHERE：</p>



<pre class="wp-block-code"><code>SELECT
    customer_id,
    COUNT(DISTINCT order_id) AS order_count
FROM orders
WHERE COUNT(DISTINCT order_id) &gt; 3
GROUP BY customer_id;</code></pre>



<p class="wp-block-paragraph">但這段 SQL 無法正確執行，因為 WHERE 是在分組與彙總之前篩選原始資料，COUNT() 則是分組後才會得到的結果。如果要篩選彙總後的訂單數，就需要使用 HAVING。</p>



<p class="wp-block-paragraph">不過，語法問題解決後，商業定義還是要確認：</p>



<p class="wp-block-paragraph">1. 購買超過 3 次，是指至少 3 次，還是大於 3 次，也就是 4 次以上？</p>



<p class="wp-block-paragraph">2. 一次購買要用資料列數量、order_id 數量，還是 completed 訂單數來判斷？</p>



<p class="wp-block-paragraph">3. 是否有指定觀察期間？是歷史累積購買次數，還是最近一年、最近 90 天的購買次數？</p>



<p class="wp-block-paragraph">4. 退貨或全額退款的訂單，還算一次購買嗎？</p>



<p class="wp-block-paragraph">假設題目的意思是歷史上完成 4 張以上訂單的顧客，那麼 Query 可以寫成：</p>



<pre class="wp-block-code"><code>SELECT
    customer_id,
    COUNT(DISTINCT order_id) AS order_count
FROM orders
WHERE order_status = 'completed'
GROUP BY customer_id
HAVING COUNT(DISTINCT order_id) &gt; 3
ORDER BY order_count DESC;</code></pre>



<p class="wp-block-paragraph">發現了嗎？WHERE 和 HAVING 都是在篩選資料，但它們發生的時間點不同。WHERE 先篩選哪些訂單可以進入計算，HAVING 再篩選哪些顧客的彙總結果符合條件。</p>



<h2 class="wp-block-heading"><strong>第 9 題：如何比較不同顧客來源渠道的營收？</strong></h2>



<p class="wp-block-paragraph">這題開始更接近真實的商業分析。公司想知道哪個 acquisition_channel 帶來最多營收，你可能會把 customers 和 orders 連接起來，再依照渠道加總 total_amount。</p>



<pre class="wp-block-code"><code>SELECT
    c.acquisition_channel,
    SUM(o.total_amount) AS revenue
FROM customers c
JOIN orders o
    ON c.customer_id = o.customer_id
GROUP BY c.acquisition_channel
ORDER BY revenue DESC;</code></pre>



<p class="wp-block-paragraph">這段 SQL 可以算出結果，但看到結果後，真的就能判斷哪個渠道表現最好嗎？先想一下，還有哪些問題需要釐清：</p>



<p class="wp-block-paragraph">1. acquisition_channel 代表顧客第一次接觸、第一次註冊，還是最後一次轉換的渠道？歸因規則是什麼？</p>



<p class="wp-block-paragraph">2. 營收是否只計算已完成的訂單？退款、折扣與不同幣別應該如何處理？</p>



<p class="wp-block-paragraph">3. customers 中的 customer_id 是否唯一？如果同一位顧客在 customers 表中出現多列，JOIN 後會不會讓營收被重複計算？</p>



<p class="wp-block-paragraph">4. 題目想比較的是營收，還是渠道效益？如果要評估效益，是否還需要廣告費、顧客取得成本與毛利資料？</p>



<p class="wp-block-paragraph">假設 acquisition_channel 是顧客註冊時的來源渠道、customer_id 在 customers 中不重複，而且只計算已完成訂單，那麼可以寫成：</p>



<pre class="wp-block-code"><code>SELECT
    c.acquisition_channel,
    COUNT(DISTINCT c.customer_id) AS purchasing_customers,
    COUNT(DISTINCT o.order_id) AS order_count,
    SUM(o.total_amount) AS revenue
FROM customers c
JOIN orders o
    ON c.customer_id = o.customer_id
WHERE o.order_status = 'completed'
GROUP BY c.acquisition_channel
ORDER BY revenue DESC;</code></pre>



<p class="wp-block-paragraph">我會同時保留購買顧客數、訂單數與營收，因為只看營收很難解釋渠道差異。某個渠道的營收較高，可能只是帶來的顧客比較多，不代表每位顧客的價值更高。</p>



<p class="wp-block-paragraph">而且別忘了，營收最高也不等於投資報酬率最高。如果真的要決定行銷預算怎麼分配，還需要搭配渠道成本、CAC、毛利與 LTV，才能做出完整判斷。</p>



<h2 class="wp-block-heading"><strong>第 10 題：如何將訂單分成高、中、低金額？</strong></h2>



<p class="wp-block-paragraph">最後一題要使用 CASE WHEN 進行分類。假設高金額訂單是 3,000 元以上、中金額訂單是 1,000～2,999 元，其餘則是低金額訂單，你可能會寫成：</p>



<pre class="wp-block-code"><code>SELECT
    order_id,
    total_amount,
    CASE
        WHEN total_amount &gt;= 3000 THEN 'High'
        WHEN total_amount &gt;= 1000 THEN 'Medium'
        ELSE 'Low'
    END AS order_value_segment
FROM orders;</code></pre>



<p class="wp-block-paragraph">語法看起來很直覺，但面試官很可能會繼續問你：「為什麼是 1,000 元和 3,000 元？」</p>



<p class="wp-block-paragraph">所以，開始分類前，你可以先確認：</p>



<p class="wp-block-paragraph">1. 高、中、低金額的門檻是公司已經定義好的，還是需要你根據資料分布自行決定？</p>



<p class="wp-block-paragraph">2. total_amount 是否為最終付款金額？取消、退款與折扣後的訂單該如何分類？</p>



<p class="wp-block-paragraph">3. 如果 total_amount 是 NULL、負數或異常高值，要放在哪一類？還是應該先排除並檢查？</p>



<p class="wp-block-paragraph">4. 不同國家或產品的訂單金額差異很大時，是否應該使用相同門檻？</p>



<p class="wp-block-paragraph">假設門檻已由公司定義，並且只分類已完成、金額不為 NULL 的訂單，那麼 Query 可以寫成：</p>



<pre class="wp-block-code"><code>SELECT
    order_id,
    total_amount,
    CASE
        WHEN total_amount &gt;= 3000 THEN 'High'
        WHEN total_amount &gt;= 1000 THEN 'Medium'
        ELSE 'Low'
    END AS order_value_segment
FROM orders
WHERE order_status = 'completed'
  AND total_amount IS NOT NULL;</code></pre>



<p class="wp-block-paragraph">CASE WHEN 會從上到下判斷條件，因此條件順序也很重要。如果先寫 total_amount &gt;= 1000，那麼 3,000 元以上的訂單也會先被歸類為 Medium，後面的 High 條件就永遠不會執行。</p>



<p class="wp-block-paragraph">實務上，如果公司沒有提供門檻，我不會直接憑感覺設定數字，而是先查看訂單金額分布，或依照百分位數、毛利與顧客經營策略來決定分類方式。</p>



<h2 class="wp-block-heading"><strong>總結：真正加分的是你如何拆解問題</strong></h2>



<p class="wp-block-paragraph">完成這五道題目後，你會發現，SQL 語法只是解題過程中的一部分。</p>



<p class="wp-block-paragraph">第 6 題看起來在考 MIN，實際上要先定義第一次購買；第 7 題使用 AVG，卻必須先確認資料粒度；第 8 題考 WHERE 和 HAVING，也要先釐清購買次數；第 9 題使用 JOIN 分析渠道營收，但不能把營收直接當成渠道效益；第 10 題使用 CASE WHEN 分群，門檻也不能毫無依據地設定。</p>



<p class="wp-block-paragraph">發現了嗎？同一段 SQL，在不同的資料結構與商業定義下，可能會得到完全不同的答案。</p>



<p class="wp-block-paragraph">所以下次面試時，先別急著證明自己寫 Query 的速度。先說明你想確認哪些事情、你目前採用什麼假設，以及這些假設會如何影響結果。這些看似繞了一點的步驟，反而更能讓面試官看見你真正的分析能力。</p>



<p class="wp-block-paragraph">數據分析師的價值，不只是把資料查出來，而是確保查出來的資料，真的能回答原本的商業問題。</p>



<h2 class="wp-block-heading">看完答案後，別忘了真的動手寫一次</h2>



<p class="wp-block-paragraph">看到這裡，連同上篇：<a href="https://aderlab.com/data-analytics/sql-interview-questions-for-beginner-data-analysts/">SQL 面試題入門：數據分析師必會的 10 道基礎題 (上)</a>，你已經完成 10 道 SQL 基礎面試題了。</p>



<p class="wp-block-paragraph">不過，看懂答案和面試時能夠自己拆解問題，還是兩件不太一樣的事情。真正遇到 SQL 面試題時，面試官通常不只想知道你的 Query 能不能執行，也會觀察你是否知道要先確認資料格式、指標定義與商業情境。</p>



<p class="wp-block-paragraph">如果你想繼續練習，我整理了一份《<a href="https://buymeacoffee.com/aderlabsharon/e/572913">電商產業 SQL 面試實戰題庫</a>》，收錄 24 道不與本篇重複的電商案例題。</p>



<p class="wp-block-paragraph">題目會從基礎到進階，帶你練習付款、退款、營收、新舊客、商品表現、成長率、優惠券與購物漏斗等常見分析情境，並提供 Athena SQL 與 MySQL 8.0 參考答案，這裏購買下載：<a href="https://buymeacoffee.com/aderlabsharon/e/572913">https://buymeacoffee.com/aderlabsharon/e/572913</a>。</p>



<p class="wp-block-paragraph">讀者專屬折扣碼：BLOG，結帳時輸入折扣碼即可享有8折優惠～</p>



<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide"/>



<p class="has-medium-font-size wp-block-paragraph"><strong>Buy me a coffee 用行動支持我的內容創作</strong></p>



<p class="wp-block-paragraph"><em>如果文章對你有幫助，歡迎用小額贊助支持 Sharon 持續分享數據分析實務。</em></p>



<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="wp-block-button aligncenter is-style-fill"><a class="wp-block-button__link has-black-color has-luminous-vivid-amber-background-color has-text-color has-background wp-element-button" href="https://www.buymeacoffee.com/aderlabsharon" target="_blank" rel="noreferrer noopener">以小額贊助支持 Sharon</a></div>
</div>
</div></div>
<p>這篇文章 <a href="https://aderlab.com/data-analytics/sql-interview-questions-for-beginner-data-analysts-part-2/">SQL 面試題入門：數據分析師必會的 10 道基礎題 (下)</a> 最早出現於 <a href="https://aderlab.com">Sharon Lab∣雪倫實驗室</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://aderlab.com/data-analytics/sql-interview-questions-for-beginner-data-analysts-part-2/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5655</post-id>	</item>
		<item>
		<title>SQL 面試題入門：數據分析師必會的 10 道基礎題 (上)</title>
		<link>https://aderlab.com/data-analytics/sql-interview-questions-for-beginner-data-analysts/</link>
					<comments>https://aderlab.com/data-analytics/sql-interview-questions-for-beginner-data-analysts/#respond</comments>
		
		<dc:creator><![CDATA[Sharon]]></dc:creator>
		<pubDate>Fri, 04 Sep 2026 12:34:00 +0000</pubDate>
				<category><![CDATA[SQL]]></category>
		<category><![CDATA[數據分析]]></category>
		<category><![CDATA[SQL面試題]]></category>
		<category><![CDATA[數據分析師面試]]></category>
		<guid isPermaLink="false">https://aderlab.com/?p=5593</guid>

					<description><![CDATA[<p>整理資料分析師常見的 10 道 SQL 基礎面試題，包含 JOIN、GROUP BY、HAVING、CASE WHEN 與解題注意事項。</p>
<p>這篇文章 <a href="https://aderlab.com/data-analytics/sql-interview-questions-for-beginner-data-analysts/">SQL 面試題入門：數據分析師必會的 10 道基礎題 (上)</a> 最早出現於 <a href="https://aderlab.com">Sharon Lab∣雪倫實驗室</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-group aderlab-article"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<p class="wp-block-paragraph">準備數據分析師面試時，SQL 幾乎是無法避開的一關，即使公司使用 Tableau、Power BI 或 Python進行視覺化呈現，分析師仍需要透過 SQL 從資料庫提取視覺化前需要的底層資料。</p>



<p class="wp-block-paragraph">SQL 面試的重點不只是在測試語法，面試官更想透過面試，知道你是否能理解資料內容、將商業問題轉換成查詢條件、避免重複計算，並正確處理商業問題，這篇文章就來與你分享 10 道數據分析師的 SQL 基礎面試題。</p>



<h2 class="wp-block-heading"><strong>練習使用的資料表</strong></h2>



<p class="wp-block-paragraph">一開始，我們先假設兩張簡化的電商資料表：</p>



<p class="wp-block-paragraph">一張資料表叫做customers 包含客戶資料，包括 customer_id、signup_date、country、acquisition_channel</p>



<p class="wp-block-paragraph">另外一張表則為訂單紀錄表orders， 包含所有訂單紀錄，資料欄位有： order_id、customer_id、order_date、order_status、total_amount。</p>



<h2 class="wp-block-heading"><strong>第 1 題：如何每個月的訂單數與營收？</strong></h2>



<p class="wp-block-paragraph">這時候你是不是會想要急著開始寫你的SQL呢？</p>



<pre class="wp-block-code"><code>SELECT
    DATE_TRUNC('month', order_date) AS order_month,
    COUNT(DISTINCT order_id) AS order_count,
    SUM(total_amount) AS revenue
FROM orders
GROUP BY 1
ORDER BY 1;</code></pre>



<p class="wp-block-paragraph">在還沒確認商業問題之前，貿然寫出你的Query答案，可能會讓你有點扣分，解題之前，其實最重要的就是確認商業問題以及資料格式，所以先別急著寫下你的query，如果資訊只有上面提供的資料表以及資料欄位，其實並不足以讓你判斷你的Query語法應該怎麼下。</p>



<p class="wp-block-paragraph">下手之前，你可以問問，例如：</p>



<p class="wp-block-paragraph">1. order_date的資料格式是什麼？是日期格式嗎？還是string(字串), int(整數) 或者是timestamp格式呢？基於資料表的大小以及儲存限制，不同公司不同資料表可能會針對日期做不同的儲存格式，所以確認資料欄位的格式，絕對是第一步。</p>



<p class="wp-block-paragraph">2. 每月的訂單數與營收是指完成的訂單數嗎？資料表目前的資料只包含完成的訂單嗎？如果是先完成的訂單，但後續有退貨或是換貨，該訂單的狀態會是退貨嗎？部分退貨部分取貨，那資料欄位又會怎麼顯示呢？</p>



<p class="wp-block-paragraph">3. revenue是否代表實際客戶付款的金額呢？還是折扣前金額呢？如果是折扣前金額，是否需要扣除折扣金額或是運費呢？</p>



<p class="wp-block-paragraph">發現了嗎？光是詢問這些問題，就可能讓你的query的處理方式完全不一樣，所以，開始回答前，請先想一下實際的商業案例可能會有哪些情況，並試想可能的情況，才會讓你的能力不僅僅停留在sql的寫手，而是專業的商業問題解析員</p>



<p class="wp-block-paragraph">問完這些問題，你可能會得到：</p>



<p class="wp-block-paragraph">日期的格式為整數，需要計算已完成的訂單，已完成的訂單可以以order_status = &#8216;completed&#8217;來判斷，先不考慮退貨，revenue是指最終營收，所以其他折扣與運費不避考慮。</p>



<pre class="wp-block-code"><code>SELECT
    DATE_TRUNC('month', DATE_PARSE(CAST(order_date AS VARCHAR), '%Y%m%d')) AS order_month,
    COUNT(DISTINCT order_id) AS order_count,
    SUM(total_amount) AS revenue
FROM orders
WHERE order_status = 'completed'
GROUP BY 1
ORDER BY 1;</code></pre>



<p class="wp-block-paragraph">結果是不是就跟一開始還沒釐清商業問題完全不一樣了呢？</p>



<h2 class="wp-block-heading"><strong>第 2 題：如何找出消費金額最高的 10 位顧客？</strong></h2>



<p class="wp-block-paragraph">看到「消費金額最高」這幾個字，你是不是已經準備把每位顧客的 total_amount 加總，再由高到低排序了呢？</p>



<pre class="wp-block-code"><code>SELECT
    customer_id,
    SUM(total_amount) AS total_spend
FROM orders
GROUP BY customer_id
ORDER BY total_spend DESC
LIMIT 10;</code></pre>



<p class="wp-block-paragraph">先別急著交出這個答案。這段 SQL 在語法上可能沒有問題，但「消費金額」在商業情境中，還有很多需要確認的細節。</p>



<p class="wp-block-paragraph">下手之前，你可以先問：</p>



<p class="wp-block-paragraph">1. 消費金額是所有訂單的金額，還是只計算已完成的訂單？取消、付款失敗與退款訂單需要排除嗎？</p>



<p class="wp-block-paragraph">2. total_amount 代表折扣前金額，還是顧客實際支付的金額？裡面是否包含運費、退款金額？</p>



<p class="wp-block-paragraph">3. 資料中是否有不同幣別？如果有人使用美元消費、有人使用台幣消費，可以直接把金額放在一起比較嗎？</p>



<p class="wp-block-paragraph">發現了嗎？只是要找出消費金額最高的顧客，就會牽涉訂單狀態、金額定義、幣別。技術上能夠加總，不代表這些數字在商業上真的可以直接相比。</p>



<p class="wp-block-paragraph">假設面試官進一步告訴你：資料只有單一幣別、total_amount 已經是最終付款金額，而且只需要計算 order_status = &#8216;completed&#8217; 的訂單，那麼 Query 就可以寫成：</p>



<pre class="wp-block-code"><code>SELECT
    customer_id,
    SUM(total_amount) AS total_spend
FROM orders
WHERE order_status = 'completed'
GROUP BY customer_id
ORDER BY total_spend DESC
LIMIT 10;</code></pre>



<p class="wp-block-paragraph">這題真正想測試的，不只是你會不會使用 SUM、GROUP BY、ORDER BY 和 LIMIT，而是你是否知道「消費金額最高」背後還藏著哪些商業定義。</p>



<h2 class="wp-block-heading"><strong>第 3 題：如何計算每個國家的購買顧客數？</strong></h2>



<p class="wp-block-paragraph">這一題需要使用 customers 與 orders 兩張資料表。看到 customer_id 同時出現在兩張表裡，你可能會很快想到用 JOIN 把它們連起來。</p>



<pre class="wp-block-code"><code>SELECT
    c.country,
    COUNT(DISTINCT c.customer_id) AS customer_count
FROM customers c
JOIN orders o ON c.customer_id = o.customer_id
GROUP BY c.country
ORDER BY customer_count DESC;</code></pre>



<p class="wp-block-paragraph">不過，在正式回答之前，還是要先確認題目裡的「國家」和「購買顧客」分別代表什麼。</p>



<p class="wp-block-paragraph">你可以先問：</p>



<p class="wp-block-paragraph">1. country 是會員註冊時填寫的國家、目前居住國家，還是訂單的配送國家？如果顧客購買送給住在不同居住地的收件者，應該歸在哪個國家？</p>



<p class="wp-block-paragraph">2. 「購買顧客」是曾經建立訂單就算？還是至少要有一筆已完成訂單？如果是要有一筆完成訂單，是多久內完成訂單的客戶才要算？</p>



<p class="wp-block-paragraph">3. 一位顧客可能有很多筆訂單，JOIN 之後會出現很多列。這時候應該計算訂單筆數，還是不重複的顧客人數？</p>



<p class="wp-block-paragraph">第 3 個問題非常重要。如果直接使用 COUNT(*)，一位下過 10 次訂單的顧客就會被計算 10 次，但題目問的是顧客數，因此需要使用 COUNT(DISTINCT customer_id) 避免重複計算。</p>



<p class="wp-block-paragraph">假設 country 代表顧客註冊的國家，而購買顧客的定義是2025(2025-01-01~2025-12-31)至少完成過一筆訂單，那麼 SQL 可以寫成：</p>



<pre class="wp-block-code"><code>SELECT
    c.country,
    COUNT(DISTINCT c.customer_id) AS customer_count
FROM customers c
JOIN orders o ON c.customer_id = o.customer_id and 
WHERE o.order_status = 'completed' and DATE(DATE_PARSE(CAST(order_date AS VARCHAR), '%Y%m%d')) between DATE('2025-01-01') AND DATE('2025-12-31') 
GROUP BY c.country
ORDER BY customer_count DESC;</code></pre>



<p class="wp-block-paragraph">如果題目改成「每個國家的註冊顧客數」，那就不一定需要 JOIN orders。光是「註冊顧客」與「購買顧客」兩個字的差別，就會直接改變你需要使用的資料表與篩選條件囉～</p>



<h2 class="wp-block-heading"><strong>第 4 題：如何找出從未下單的會員？</strong></h2>



<p class="wp-block-paragraph">這是一道很常見的 JOIN 題目。你可能知道要使用 LEFT JOIN，但真正容易出錯的地方，反而是「從未下單」到底是什麼意思。</p>



<p class="wp-block-paragraph">開始寫 Query 前，可以先確認：</p>



<p class="wp-block-paragraph">1. 從未下單是指完全沒有建立過任何訂單，還是沒有完成過訂單？</p>



<p class="wp-block-paragraph">2. 如果會員曾經下單，但後來取消、付款失敗或全額退款，他還算是下過單嗎？</p>



<p class="wp-block-paragraph">3. orders 資料表是否包含測試訂單？測試帳號與內部員工帳號是否需要排除？</p>



<p class="wp-block-paragraph">假設面試官說，這裡的「從未下單」就是在 orders 資料表中完全找不到任何訂單紀錄，那麼可以使用 LEFT JOIN：</p>



<pre class="wp-block-code"><code>SELECT
    c.customer_id,
    c.signup_date,
    c.country
FROM customers c
LEFT JOIN orders o
    ON c.customer_id = o.customer_id
WHERE o.order_id IS NULL;</code></pre>



<p class="wp-block-paragraph">為什麼不能使用 INNER JOIN 呢？因為 INNER JOIN 只會保留兩張表都有出現的 customer_id，沒有訂單的會員反而會直接被排除。LEFT JOIN 則會先保留 customers 中的所有會員，再讓找不到訂單的資料呈現 NULL，因此可以用 o.order_id IS NULL 把他們找出來。</p>



<p class="wp-block-paragraph">但如果題目真正想找的是「從未完成訂單的會員」，就不能只是把 order_status = &#8216;completed&#8217; 寫在最後的 WHERE 條件中，否則很容易改變 LEFT JOIN 的結果。這時候，可以把完成訂單的條件放進 JOIN：</p>



<pre class="wp-block-code"><code>SELECT
    c.customer_id,
    c.signup_date,
    c.country
FROM customers c
LEFT JOIN orders o ON c.customer_id = o.customer_id AND o.order_status = 'completed'
WHERE o.order_id IS NULL;</code></pre>



<p class="wp-block-paragraph">發現了嗎？「沒有下單」和「沒有完成訂單」看起來很接近，實際上卻是兩個不同的客群。面試時先說清楚你的定義，會比直接背出 LEFT JOIN 更加分。</p>



<h2 class="wp-block-heading"><strong>第 5 題：如何計算不同訂單狀態的占比？</strong></h2>



<p class="wp-block-paragraph">如果題目要你計算 completed、cancelled、refunded 等不同訂單狀態的占比，你可能會先想到依照 order_status 分組，再計算每一組的訂單數。</p>



<pre class="wp-block-code"><code>SELECT
    order_status,
    COUNT(*) AS order_count
FROM orders
GROUP BY order_status;</code></pre>



<p class="wp-block-paragraph">但是只有各狀態的訂單數，還不能算出占比。正式往下寫之前，你可以先確認：</p>



<p class="wp-block-paragraph">1. 一筆資料列就代表一張訂單嗎？還是同一張訂單會因為包含多個商品而出現多列？如果是一張訂單多列，就不能直接使用 COUNT(*)。</p>



<p class="wp-block-paragraph">2. 訂單狀態是目前的最終狀態，還是每次狀態變更都會留下紀錄？如果是狀態歷程表，同一張訂單可能會被重複計算。</p>



<p class="wp-block-paragraph">3. 占比的分母是所有訂單，還是只計算某段期間、特定市場或特定渠道的訂單？</p>



<p class="wp-block-paragraph">4. order_status 如果是 NULL 或出現未知狀態，要獨立列出、歸類為 other，還是排除？</p>



<p class="wp-block-paragraph">假設 orders 中的一列就是一張訂單、order_status 是訂單目前的最終狀態，而且分母包含資料表中的所有訂單，那麼可以搭配 Window Function 計算占比：</p>



<pre class="wp-block-code"><code>WITH status_count AS (
    SELECT
        order_status,
        COUNT(*) AS order_count
    FROM orders
    GROUP BY order_status
),

total_count AS (
    SELECT
        COUNT(*) AS total_order_count
    FROM orders
)

SELECT
    s.order_status,
    s.order_count,
    ROUND(
        100.0 * s.order_count / t.total_order_count,
        2
    ) AS order_percentage
FROM status_count s
CROSS JOIN total_count t
ORDER BY s.order_count DESC;</code></pre>



<p class="wp-block-paragraph">在這段 Query 中，我們先透過 <code>status_count</code> 計算每個 <code>order_status</code> 分別有多少筆訂單，再透過 <code>total_count</code> 計算全部訂單的總數。</p>



<p class="wp-block-paragraph">最後，將每種狀態的訂單數除以全部訂單數，再乘以 100，就可以得到各訂單狀態所占的百分比。</p>



<p class="wp-block-paragraph">Query 寫完後也別急著結束。你還可以檢查各狀態的百分比加總是否接近 100%，並觀察 cancelled 或 refunded 的比例是否異常。這樣回答，就不只是算出結果，也展現了你會檢查資料品質與商業合理性。</p>



<h2 class="wp-block-heading"><strong>總結：SQL 面試不是只看你會不會寫語法</strong></h2>



<p class="wp-block-paragraph">看完前面五道題目，你可能會發現，這些 SQL 語法其實都不算太複雜，使用的主要是 GROUP BY、JOIN、SUM、COUNT、ORDER BY。</p>



<p class="wp-block-paragraph">真正困難的地方，反而是在開始寫 Query 之前，你能不能先把問題問清楚。</p>



<p class="wp-block-paragraph">日期欄位是 date、timestamp、string，還是整數？營收要不要扣除退款與折扣？購買顧客是曾經建立訂單，還是至少完成過一筆訂單？從未下單，是完全沒有訂單紀錄，還是沒有成功完成的訂單？計算訂單狀態占比時，一列資料又是否真的代表一張訂單？</p>



<p class="wp-block-paragraph">這些問題看起來都不是 SQL 語法，卻會直接決定你的 SQL 應該怎麼寫。如果商業定義理解錯誤，就算 Query 能夠成功執行，最後得到的答案也不一定是公司真正想知道的結果，所以啊，下次遇到 SQL 面試題時，先別急著埋頭寫答案。你可以按照下面的順序思考：</p>



<ol class="wp-block-list">
<li>確認題目真正想解決的商業問題。</li>



<li>確認資料表、欄位格式與每一列資料代表的意義。</li>



<li>說明你對指標與篩選條件的假設。</li>



<li>拆解查詢步驟，再開始撰寫 SQL。</li>



<li>寫完後檢查重複資料、NULL、取消、退款與其他例外情況。</li>



<li>最後確認查詢結果在商業上是否合理。</li>
</ol>



<p class="wp-block-paragraph">發現了嗎？面試官想找的通常不是一位只會背語法的 SQL 寫手，而是一位能理解資料、釐清問題，並且把商業需求轉換成正確查詢邏輯的數據分析師。</p>



<p class="wp-block-paragraph">這篇先和你分享前五道 SQL 基礎面試題。下一篇，我會繼續整理第 6～10 題，帶你練習日期處理、HAVING、CASE WHEN，以及更多數據分析師面試中常見的應用情境。</p>
</div></div>



<h2 class="wp-block-heading">想繼續練習更多電商 SQL 面試題嗎？</h2>



<p class="wp-block-paragraph">如果你已經完成上面的題目，接下來可以試著挑戰更多貼近實際工作情境的 SQL 題目。</p>



<p class="wp-block-paragraph">我整理了一份《<a href="https://buymeacoffee.com/aderlabsharon/e/572913">電商產業 SQL 面試實戰題庫</a>》，收錄 24 道電商商業案例，涵蓋付款失敗率、取消與退款、實際營收、新舊客、回購率、商品表現、MoM、QoQ、優惠券成效與購物轉換漏斗。</p>



<p class="wp-block-paragraph">每一道題目都會提供資料表與欄位，讓你先練習釐清商業問題、拆解查詢步驟，再對照 Athena SQL 與 MySQL 8.0 的參考答案，這裏購買：<a href="https://buymeacoffee.com/aderlabsharon/e/572913">https://buymeacoffee.com/aderlabsharon/e/572913</a></p>



<p class="wp-block-paragraph">最後也提供讀者專屬折扣碼：BLOG，結帳時輸入折扣碼即可享有8折優惠～</p>



<div class="wp-block-group aderlab-article"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide"/>



<p class="has-medium-font-size wp-block-paragraph"><strong>Buy me a coffee　用行動支持我的內容創作</strong></p>



<p class="wp-block-paragraph"><em>如果我的文章對你有幫助，歡迎用小額贊助支持內容創作，也歡迎留言分享你的 SQL 面試經驗。</em></p>



<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="wp-block-button aligncenter is-style-fill"><a class="wp-block-button__link has-black-color has-luminous-vivid-amber-background-color has-text-color has-background wp-element-button" href="https://www.buymeacoffee.com/aderlabsharon" target="_blank" rel="noreferrer noopener">以小額贊助支持 Sharon</a></div>
</div>
</div></div>
<p>這篇文章 <a href="https://aderlab.com/data-analytics/sql-interview-questions-for-beginner-data-analysts/">SQL 面試題入門：數據分析師必會的 10 道基礎題 (上)</a> 最早出現於 <a href="https://aderlab.com">Sharon Lab∣雪倫實驗室</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://aderlab.com/data-analytics/sql-interview-questions-for-beginner-data-analysts/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5593</post-id>	</item>
		<item>
		<title>「幫我拉一份數據」：數據分析師接到模糊需求時該問的七個問題</title>
		<link>https://aderlab.com/data-analytics/data-analyst-requirement-questions/</link>
					<comments>https://aderlab.com/data-analytics/data-analyst-requirement-questions/#respond</comments>
		
		<dc:creator><![CDATA[Sharon]]></dc:creator>
		<pubDate>Sun, 30 Aug 2026 09:18:52 +0000</pubDate>
				<category><![CDATA[數據分析]]></category>
		<category><![CDATA[職涯點滴]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[商業分析]]></category>
		<category><![CDATA[數據分析工作]]></category>
		<category><![CDATA[數據分析師]]></category>
		<category><![CDATA[需求訪談]]></category>
		<guid isPermaLink="false">https://aderlab.com/?p=5571</guid>

					<description><![CDATA[<p>收到 stakeholder 說「幫我拉一份數據」，你會立刻問需要哪些欄位，還是先了解他真正想解決的問題？本文整理數據分析師面對模糊需求時應該確認的七個問題，幫助你減少來回修改，也讓交付的數據真正支持決策。</p>
<p>這篇文章 <a href="https://aderlab.com/data-analytics/data-analyst-requirement-questions/">「幫我拉一份數據」：數據分析師接到模糊需求時該問的七個問題</a> 最早出現於 <a href="https://aderlab.com">Sharon Lab∣雪倫實驗室</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">「可以幫我拉一份營收數據嗎？」</p>



<p class="wp-block-paragraph">這句話，每個數據分析師應該都聽過無數次。</p>



<p class="wp-block-paragraph">最讓人頭痛的通常不是資料拉不出來，而是——你到底想看什麼？</p>



<p class="wp-block-paragraph">但別懷疑，這就是數據分析師的日常。</p>



<p class="wp-block-paragraph">來要數據的人可能是老闆、行銷、產品、業務或客服。每個人對公司有哪些資料、資料可以拆到多細，以及不同欄位代表什麼，熟悉程度都不一樣。因此，我們很常遇到以下兩種情況。</p>



<p class="wp-block-paragraph">第一種：需求人其實也不知道自己為什麼需要這份數據</p>



<p class="wp-block-paragraph">如果需求是老闆交代的，來找分析師的人可能只是中間負責整理資料。他只知道老闆要看營收，所以就把「幫我拉營收數據」這句話原封不動地轉過來。至於老闆為什麼想看、看完要做什麼，他自己可能也不清楚。</p>



<p class="wp-block-paragraph">第二種：對方提出的需求，其實無法滿足他的真正目的</p>



<p class="wp-block-paragraph">因為大家對公司資料欄位的理解有限，不知道資料能提供到什麼程度，所以很容易要錯資料。</p>



<p class="wp-block-paragraph">例如，對方想了解不同銷售渠道的營運表現，開口卻只說：「幫我拉營收數據。」但他真正需要的，可能不只是各渠道的營收，還包括每個渠道的廣告費、抽成和其他營運成本。把這些資料放在一起，才能進一步判斷各渠道的投資報酬率。</p>



<p class="wp-block-paragraph">這些情況真的非常常見。</p>



<p class="wp-block-paragraph">所以，當我一開始聽到「幫我拉一份數據」時，腦中通常會冒出一大堆問號：為什麼要看？看完準備做什麼？要看哪些人、哪些商品、哪段時間？指標又該怎麼算？</p>



<p class="wp-block-paragraph">如果這些事情都還沒確認，就馬上打開 SQL 開始撈資料，很可能忙了半天才發現，做出來的根本不是對方真正需要的東西。小心做到最後，只能全部重來。</p>



<p class="wp-block-paragraph">面對這種模糊的需求，我通常會先問下面七個問題，把一句「幫我拉數據」，慢慢轉換成可以執行、可以交付，也真的能幫助決策的分析需求。</p>



<h2 class="wp-block-heading">一、你想透過這份數據了解什麼？</h2>



<p class="wp-block-paragraph">比起一開始就問「你需要哪些欄位」，我更建議先了解對方為什麼需要這份數據。</p>



<p class="wp-block-paragraph">是要規劃促銷活動？向主管報告績效？了解市場趨勢？還是回覆客戶提出的問題？目的不同，需要準備的資料和呈現方式也會不一樣。</p>



<p class="wp-block-paragraph">例如，同樣是想了解最近的營收表現，如果是要向主管報告，可能需要呈現整體趨勢、目標達成率，以及和去年同期的比較。但如果是為了規劃下一波促銷活動，就可能要把營收拆成不同商品、客群和銷售渠道，才能找出值得投入的地方。</p>



<p class="wp-block-paragraph">所以，收到需求時，可以先問：</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">你希望透過這份數據了解什麼？最近是遇到什麼問題，或觀察到什麼現象，才會想看這份資料？</p>
</blockquote>



<p class="wp-block-paragraph">先搞清楚數據背後真正想回答的問題，才能避免最後交出一份看起來很完整，實際上卻派不上用場的資料。</p>



<h2 class="wp-block-heading">二、看到結果之後，你準備做什麼？</h2>



<p class="wp-block-paragraph">知道對方為什麼想看數據之後，下一步就是確認：看完結果，他打算做什麼決定或採取什麼行動？</p>



<p class="wp-block-paragraph">例如，同樣是想了解會員流失，後續可能是要規劃會員召回活動、調整會員制度，或評估要不要增加客服人力。不同的行動方向，需要觀察的指標和資料維度也不一樣。</p>



<p class="wp-block-paragraph">如果這份資料只是要放進例行會議，可能提供整體趨勢和幾個明顯異常就夠了；但如果結果會直接影響預算怎麼分配，就可能需要更深入的客群分析、成效比較，甚至進一步做效益推估。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">看完這份數據後，你預計要做什麼決定？這個結果可能會影響哪些行動？</p>
</blockquote>



<p class="wp-block-paragraph">如果對方一時答不出來，也不一定表示這個需求沒有價值。至少可以先確認：他要的只是一份提供資訊的報表，還是一份要拿來支持決策的分析。</p>



<h2 class="wp-block-heading">三、這次要看哪些對象？又要排除哪些資料？</h2>



<p class="wp-block-paragraph">確認目的之後，接下來就要把分析範圍講清楚。很多聽起來很明確的對象，實際上都可能有不同的解讀。</p>



<p class="wp-block-paragraph">例如，「會員人數」可能是所有完成註冊的人，也可能只包含完成驗證、曾經消費，或最近仍然活躍的會員。「訂單數」也一樣，裡面到底要不要包含取消訂單、測試訂單、退款訂單或付款失敗的訂單？</p>



<ul class="wp-block-list">
<li class="">要分析所有使用者，還是特定會員或客群？</li>



<li class="">要包含哪些商品、地區或銷售渠道？</li>



<li class="">測試、取消、退款和異常資料要不要排除？</li>



<li class="">同一位使用者有多個帳號時，要算一個人還是多個人？</li>
</ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">這次分析要包含哪些對象？有哪些資料需要排除？</p>
</blockquote>



<p class="wp-block-paragraph">如果沒有先確認範圍，就算分析師和需求方使用的是同一份資料，也可能算出完全不同的結果。</p>



<h2 class="wp-block-heading">四、這個指標到底要怎麼算？</h2>



<p class="wp-block-paragraph">確認分析對象之後，還要把關鍵指標的定義說清楚。同一個指標名稱，在不同部門或不同情境裡，不一定代表相同的計算方式。</p>



<p class="wp-block-paragraph">例如，「營收」可能是訂單成立時的金額、付款成功的金額，或扣除取消與退款後，公司實際收到的金額。「活躍會員」也可能是曾經登入、瀏覽商品、加入購物車，或完成消費的會員。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">這裡說的營收、轉換或活躍，具體是怎麼定義的？</p>
</blockquote>



<p class="wp-block-paragraph">千萬不要因為指標名稱很熟悉，就直接套用自己原本的理解。我自己就曾經有過一次血淋淋的經驗。</p>



<p class="wp-block-paragraph">因為公司平常使用的營收資料，都是以訂單成立金額計算，所以當對方提出營收需求時，我很自然地把指定期間內的訂單金額全部加總。</p>



<p class="wp-block-paragraph">做到最後才發現，他真正想知道的是「公司實際收到多少錢」。既然要看實際收入，就不能只看訂單金額，還要排除付款失敗和退貨的訂單，甚至商品是否已經超過七天退貨期，也會影響計算。</p>



<p class="wp-block-paragraph">所以真的不要理所當然地認為，對方說的某個指標一定和你想的一樣。動手前多問幾句，總比做好之後全部重來輕鬆。</p>



<h2 class="wp-block-heading">五、要看哪段時間？又要和什麼比較？</h2>



<p class="wp-block-paragraph">只有單一期間的數字，通常很難判斷表現到底算好還是不好。除了確認資料的開始和結束日期，也要了解對方想用什麼基準比較。</p>



<ul class="wp-block-list">
<li class="">和前一天、前一週或前一個月比較</li>



<li class="">和去年同期比較</li>



<li class="">和活動開始前比較</li>



<li class="">和公司目標或預算比較</li>



<li class="">和其他商品、客群或渠道比較</li>
</ul>



<p class="wp-block-paragraph">如果資料有明顯的季節性，直接和前一個月相比，可能會得出錯誤的結論。像是農曆年、週年慶或大型促銷期間的表現，通常和去年同期比較，會比和前一個月比較更有意義。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">你想看哪段時間？希望和哪個期間、目標或對象比較？</p>
</blockquote>



<p class="wp-block-paragraph">另外，也別忘了確認資料目前更新到哪一天，以及最近幾天的資料是否已經完整。不然很可能只是資料還沒跑完，大家卻以為績效突然掉下來了。</p>



<h2 class="wp-block-heading">六、這份資料只看一次，還是之後會固定看？</h2>



<p class="wp-block-paragraph">一次性的分析和需要定期追蹤的需求，處理方式其實很不一樣。</p>



<p class="wp-block-paragraph">如果只是要回答一個臨時問題，可能用 SQL 搭配 Excel，或做幾張簡單圖表就能解決。但如果對方每週或每個月都要看同一份數據，就可以考慮建立自動更新的報表或儀表板。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">這份數據只會使用一次，還是之後需要每週或每月固定查看？</p>
</blockquote>



<p class="wp-block-paragraph">確認使用頻率，可以幫助分析師判斷應該投入多少時間。如果只是一次性需求，花很多時間建立完整的自動化流程，可能不太符合成本效益；但如果是固定需求，每次都靠人工重新撈資料，不只浪費時間，也容易因為每次操作或計算方式不同而出錯。</p>



<p class="wp-block-paragraph">如果需求還在探索階段，可以先用比較輕量的方式驗證。等需求穩定之後，再建立正式的報表或儀表板也不遲。</p>



<h2 class="wp-block-heading">七、什麼時候要用？誰會看？希望怎麼交付？</h2>



<p class="wp-block-paragraph">最後，要確認交付期限、實際使用的人，以及對方希望收到什麼形式的成果。</p>



<p class="wp-block-paragraph">如果資料是交給其他分析人員繼續處理，可能需要保留完整的原始明細。如果是提供給主管做決策，可能更適合用簡單的圖表、幾個關鍵結論和行動建議來呈現。</p>



<p class="wp-block-paragraph">如果對方只是要把一個數字放進簡報，那也不一定需要花很多時間建立完整的互動式儀表板。</p>



<ul class="wp-block-list">
<li class="">資料什麼時候要用？</li>



<li class="">最後會由誰閱讀或使用？</li>



<li class="">使用者對數據的熟悉程度如何？</li>



<li class="">需要原始明細、彙總表、圖表、簡報，還是儀表板？</li>



<li class="">是否需要提供分析結論和行動建議？</li>



<li class="">是否需要在會議中進一步說明？</li>
</ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">這份資料會在什麼時間、什麼場合，由哪些人使用？你希望收到明細、彙總數字、圖表，還是分析建議？</p>
</blockquote>



<p class="wp-block-paragraph">交付形式不是愈完整愈好，而是要符合實際的使用情境。如果分析師花了很多時間做出一個精美的互動式儀表板，最後對方卻只截取其中一個數字放進簡報，那前面投入的時間，就不一定真的有產生相對應的價值。</p>



<h2 class="wp-block-heading">結語：先問清楚，再開始拉數據</h2>



<p class="wp-block-paragraph">數據分析師的價值，不只是能不能把數據準確地拉出來，也包括能不能幫助需求方釐清：「我們真正想回答的是什麼問題？」以及「這份數據最後要支持什麼決定？」</p>



<p class="wp-block-paragraph">所以下次再聽到「幫我拉一份數據」時，先別急著打開 SQL，也別立刻開始做圖表或整理報告，別忘了，你才是最了解數據的專業工作者，花幾分鐘，把上面提到的七個問題問清楚，不只能省下後續來回修改的時間，也能讓最後交付的成果，更接近對方真正需要的答案。</p>



<p class="wp-block-paragraph">你在工作中最常遇到哪一種模糊的數據需求呢？歡迎留言和我分享。</p>



<p class="wp-block-paragraph">Sharon</p>
<p>這篇文章 <a href="https://aderlab.com/data-analytics/data-analyst-requirement-questions/">「幫我拉一份數據」：數據分析師接到模糊需求時該問的七個問題</a> 最早出現於 <a href="https://aderlab.com">Sharon Lab∣雪倫實驗室</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://aderlab.com/data-analytics/data-analyst-requirement-questions/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5571</post-id>	</item>
		<item>
		<title>如何提升員工留任意願與績效？從「有效」的一對一會議安排開始</title>
		<link>https://aderlab.com/life-note/one-on-one-meeting-skills/</link>
					<comments>https://aderlab.com/life-note/one-on-one-meeting-skills/#respond</comments>
		
		<dc:creator><![CDATA[Sharon]]></dc:creator>
		<pubDate>Fri, 09 May 2025 04:28:54 +0000</pubDate>
				<category><![CDATA[生活點評]]></category>
		<category><![CDATA[閱讀過後]]></category>
		<guid isPermaLink="false">https://aderlab.com/?p=5494</guid>

					<description><![CDATA[<p>最近看了一本《高成效一對一會議寶典》，這本書是從「管理者」的角度來看一對一會議，內容涵蓋了會議前的準備工作、會議中的執行技巧，以及會議後的 Action Pla&#8230;</p>
<p><a href="https://aderlab.com/life-note/one-on-one-meeting-skills/" class="btn-continue">繼續閱讀<span class="arrow-continue">&#8594;</span></a></p>
<p>這篇文章 <a href="https://aderlab.com/life-note/one-on-one-meeting-skills/">如何提升員工留任意願與績效？從「有效」的一對一會議安排開始</a> 最早出現於 <a href="https://aderlab.com">Sharon Lab∣雪倫實驗室</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">最近看了一本《<a href="https://www.books.com.tw/products/0011020047?loc=P_0004_046&amp;srsltid=AfmBOoqmKWOABbAj0k3WQGBwMXkZsym5WHIpe_bVKQGLPugBB8oNCDAd">高成效一對一會議寶典</a>》，這本書是從「管理者」的角度來看一對一會議，內容涵蓋了會議前的準備工作、會議中的執行技巧，以及會議後的 Action Plan，如果你是主管，從來沒有開啟過一對一會議，或是開啟過一對一會議，但卻覺得效果不彰的話，這本書非常適合作為參考一對一會議如何安排與進行的敲門磚。</p>



<p class="wp-block-paragraph">延伸閱讀：員工要怎麼準備一對一會議的內容？ <a href="https://aderlab.com/job/one-one-meeting/"><strong>1 on 1 要聊什麼？分享一對一面談可以聊聊的3個方向</strong></a></p>



<p class="wp-block-paragraph">這本書提到，一個有效的一對一會議，可以達到以下幾個成效：</p>



<p class="wp-block-paragraph">1. 員工敬業度與員工成功<br>有效的一對一會議可以讓主管與員工共同聚焦在共同的目標，了解彼此的想法，也允許員工分享工作生活遇到的阻礙和難關，而主管也可以藉此分享自己的經驗或是提供協助，更能讓員工覺得被重視，得到實質的幫助，達到員工更能投入工作的正面效果。</p>



<p class="wp-block-paragraph">2. 主管成功<br>一對一會議可以讓主管有渠道獲得必要資訊，不僅僅是工作專案上的進度，也可能是員工之間的合作關係、彼此合作喜好程度等，這些都是安排工作、了解員工的重要管道之一。除此之外，固定的時間也可以讓員工有時間提出問題，避免小問題累積成大問題。</p>



<p class="wp-block-paragraph">3. 培養關係<br>工作久了我也發現，不僅僅員工要跟主管培養關係，主管其實也要，加強彼此間的連結與信任感，工作合作起來才會更愉快，而定期的一對一會議，或是單純的聊聊天，都更有助於維繫彼此的關係，讓未來的工作任務更順利</p>



<p class="wp-block-paragraph">4. 促進員工成長發展<br>「主管的成功來自於幫助他人的成長」，透過一對一會議，也有更多機會了解員工的職涯發展期待、想要做的專案任務，幫助完成員工的需求，不僅僅可以提高員工對工作的滿意度，也能持續為公司留住人才。</p>



<p class="wp-block-paragraph">總結來說，一對一會議的重點就是希望員工與主管達到「雙贏」，主管可能希望藉此了解員工對工作的滿意程度、表現、或是職涯規劃，以此作為後續工作安排的參考，並且讓員工願意持續留下來工作，而員工可能藉此想要了解主管對自己的想法，達到加薪、升遷，或是爭取喜歡工作任務的機會。</p>



<p class="wp-block-paragraph">但如果一對一會議的準備與過程當中沒有「開放對話」、「一對一對談」、「回饋沒有後續行動」，就很容易即便有了一對一會議，還是達不到一對一會議的效果。以我的一對一會議經驗來說，我的四份工作經歷中，有兩份工作有一對一會議的安排，其中一個讓我覺得只是過過場面，另外一個卻讓我覺得一對一會議有意義，那到底是什麼差異讓我有截然不同的感受與結論呢？主要有三大差異：</p>



<p class="wp-block-paragraph">1. 參與者組成 </p>



<p class="wp-block-paragraph">首先是參與者的不同，我第一次的一對一會議經驗，美其名是一對一會議，但其實參與者不僅僅有直屬主管，還多了一位老闆以及一位資深兼當合夥的別部門的主管，簡單來說就是跟三位合資老闆們的會議對談，第一瞬間的感覺是「倍感壓力」。進入會議室的當下，三個人排坐一列，像極了三對一的面試。除此之外，當人越多，而且對象不僅僅是直屬主管，就愈失去一對一會議可以暢所欲言的環境與氛圍。相反的，我第二次的一對一會議經驗就不太一樣，不僅僅是真真切切的「一對一」，也是特別選在相對環境舒適，比較像是晤談室的會議空間，不會有一進去就要被質問的對立感受。</p>



<p class="wp-block-paragraph">2. 討論內容</p>



<p class="wp-block-paragraph">其次討論內容也大相徑庭，其中一個一對一會議，會議前會有既定的問題討論議程，並且與績效評估綁定，好像承認了自己有工作上的困難或是工作負擔太大，就會影響到自己的績效考核，所以那時候即便是被工作壓得喘不過氣，我也是憋著完全沒有說。換到另一個會議，因為平常如果有表現問題就會被指導，所以一對一會議則比較是一個可以暢所欲言的環境，可以分享自己工作上的專案、可以分享工作負擔，也可以純粹是聊聊天，比較舒緩的氛圍也讓我比較放鬆可以好好表達自己的需求與感受。</p>



<p class="wp-block-paragraph">可見，一對一會議不是召開了就能達到立竿見影的效果，相反的，一對一會議每個環節都需要特別「設計」，包括讓員工了解一對一會議的目的、可以聊的話題、主管進行過程的態度、會議環境、來回對話比例都是需要精心安排，而這本書都一一分享了每個環節常見的疑問以及解法。我特別喜歡第六章的內容：如何開啟對話，裡面提供了非常多的範例問句，如果你正煩惱著不知道要在一對一會議裡面說些什麼，第六章的開啟對話絕對會讓你有很多靈感，不僅僅適合用於一對一的會議起頭，如果你正處於職涯焦慮期或是迷惘期，這些問題也非常適合用來問問自己，例如：</p>



<ul class="wp-block-list">
<li class="">工作的哪些部分你不喜歡？那你最喜歡的是什麼？</li>



<li class="">自從你開始擔任這個職位，一切是否如預期？有沒有任何出乎意料的優點或是缺點？</li>



<li class="">你能否在這份工作中找到意義？如果沒有，什麼樣的改變能有所幫助？</li>



<li class="">你是否滿意自己的工作/生活平衡？有沒有什麼我可以幫得上忙的地方？</li>



<li class="">你覺得這間公司可以幫助你成長、發展或是發光發熱嗎？</li>
</ul>



<p class="wp-block-paragraph">當然，一次的一對一會議並不一定可以把這些類別的問題都問完，所以更應該依照員工當時的狀況挑選，例如說，面對剛開始一對一的成員，可能信任關係還不足，可能重點可以放在培養關係或是成長類的問題，如果有員工有離職傾向，那也許多挑選一些留任或是關心進度的問題會更適合。</p>



<p class="wp-block-paragraph">好啦，那剩下的精彩內容就留給你在閱讀中獲得啦，我們下篇文章見：）</p>



<p class="has-text-align-right wp-block-paragraph">Sharon</p>



<hr class="is-style-wide wp-block-separator has-alpha-channel-opacity"/>



<p class="has-medium-font-size wp-block-paragraph"><strong>Buy me a coffee&nbsp; 用行動支持我的內容創作</strong></p>



<p class="wp-block-paragraph"><em>如果我的文章對你有幫助，歡迎用行動支持我的內容創作，小額贊助請我喝咖啡、留言或是寄信來跟我分享你的收穫，都會讓我持續有動力分享更多內容唷～</em></p>



<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="aligncenter is-style-fill wp-block-button"><a class="wp-block-button__link has-black-color has-luminous-vivid-amber-background-color has-text-color has-background wp-element-button" href="https://www.buymeacoffee.com/aderlabsharon" target="_blank" rel="noreferrer noopener">以小額贊助支持Sharon</a></div>
</div>



<p class="wp-block-paragraph"></p>
<p>這篇文章 <a href="https://aderlab.com/life-note/one-on-one-meeting-skills/">如何提升員工留任意願與績效？從「有效」的一對一會議安排開始</a> 最早出現於 <a href="https://aderlab.com">Sharon Lab∣雪倫實驗室</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://aderlab.com/life-note/one-on-one-meeting-skills/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5494</post-id>	</item>
		<item>
		<title>數據分析師必看！Tableau 自學指南：技能解析、應用實例與學習心得分享</title>
		<link>https://aderlab.com/data-analytics/tableau-self-learning/</link>
					<comments>https://aderlab.com/data-analytics/tableau-self-learning/#respond</comments>
		
		<dc:creator><![CDATA[Sharon]]></dc:creator>
		<pubDate>Sun, 12 Jan 2025 08:27:31 +0000</pubDate>
				<category><![CDATA[Tableau]]></category>
		<category><![CDATA[數據分析]]></category>
		<guid isPermaLink="false">https://aderlab.com/?p=5454</guid>

					<description><![CDATA[<p>「想成為數據分析師需要哪些技能？」這是許多剛接觸數據分析領域的新手常有的疑問。這篇文章，除了解答新手常見的疑難雜症外，我也會分享我在初學 Tableau 時面臨的挑戰與調整。</p>
<p>這篇文章 <a href="https://aderlab.com/data-analytics/tableau-self-learning/">數據分析師必看！Tableau 自學指南：技能解析、應用實例與學習心得分享</a> 最早出現於 <a href="https://aderlab.com">Sharon Lab∣雪倫實驗室</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p class="has-medium-font-size wp-block-paragraph"><strong>想成為數據分析師，Tableau 應該怎麼自學？</strong>先別急著把所有圖表功能看完。比較有效的順序是：先理解資料欄位與商業問題，再完成一張圖表、一個互動式 Dashboard，最後把分析過程整理成作品集。這篇文章會結合我的實際工作經驗、自學時遇過的問題，以及可以照著執行的學習路線，帶你從零開始建立 Tableau 能力。</p>



<p class="wp-block-paragraph">數據分析師的工具很多，除了常見的 SQL，資料視覺化也是非常重要的能力。自從我成為數據分析師後，Tableau 幾乎是工作中每天都會用到的工具。不過，我一開始也曾在官方文件與零碎教學影片之間打轉：看過很多功能，真正拿到資料時卻不知道要分析什麼，更不知道怎麼把圖表變成可以支持決策的報表。</p>



<h2 class="wp-block-heading">Tableau 是什麼？我在工作中怎麼使用它？</h2>



<p class="wp-block-paragraph">Tableau 是一套視覺化分析平台，可以連接 Excel、CSV、資料庫等來源，把資料轉換成圖表與互動式儀表板。在實際工作場域裡，它不只是數據分析師做分析與報告的工具，也能提供決策者定期更新的報表，讓內部或外部使用者快速查詢重點資訊。</p>



<p class="wp-block-paragraph">例如，我會透過 Tableau 建置自動更新的報表，設定固定寄送時間，讓老闆快速掌握盈虧，再進一步調整庫存或銷售策略。與行銷同事合作時，報表也能呈現會員消費狀況、行銷預算花費與各管道收益，幫助團隊判斷目前的行銷與會員溝通策略是否奏效。</p>



<figure class="wp-block-image size-large"><img decoding="async" src="https://i0.wp.com/aderlab.com/wp-content/uploads/%E9%80%8F%E9%81%8E%E6%95%B8%E6%93%9A%E8%A6%96%E8%A6%BA%E5%8C%96%E5%BE%8C%E5%B8%B6%E4%BE%86%E7%9A%84%E9%87%8D%E9%BB%9E%E6%8F%90%E7%A4%BA%E6%95%88%E6%9E%9C.png" alt="透過數據視覺化後帶來的重點提示效果" class="wp-image-5456"/><figcaption class="wp-element-caption">把原始資料轉成圖表後，更容易看出趨勢、差異與需要採取行動的地方。</figcaption></figure>



<h3 class="wp-block-heading">為什麼不只使用 Excel 或 Python？</h3>



<p class="wp-block-paragraph">Excel 很適合快速整理資料與小型分析，但資料量變大、報表需要頻繁更新，或需要多人共用互動式畫面時，維護成本可能提高。Tableau 的拖拉式介面、資料連接與互動功能，能讓我更快探索資料並建立可重複使用的報表。</p>



<p class="wp-block-paragraph">Python 的彈性更高，也適合自動化、統計分析與客製化任務；不過，如果眼前的目標是快速與團隊溝通資料，Tableau 往往能縮短製圖與調整版面的時間。工具沒有絕對高下，重點是資料規模、使用對象與分析目的。</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1801" height="1013" src="https://i0.wp.com/aderlab.com/wp-content/uploads/image-12.png" alt="Tableau 拖拉介面，讓數據分析更便捷" class="wp-image-5457" srcset="https://i0.wp.com/aderlab.com/wp-content/uploads/image-12.png?w=1801&amp;ssl=1 1801w, https://i0.wp.com/aderlab.com/wp-content/uploads/image-12.png?resize=300%2C169&amp;ssl=1 300w, https://i0.wp.com/aderlab.com/wp-content/uploads/image-12.png?resize=1024%2C576&amp;ssl=1 1024w, https://i0.wp.com/aderlab.com/wp-content/uploads/image-12.png?resize=768%2C432&amp;ssl=1 768w, https://i0.wp.com/aderlab.com/wp-content/uploads/image-12.png?resize=1536%2C864&amp;ssl=1 1536w, https://i0.wp.com/aderlab.com/wp-content/uploads/image-12.png?w=1416&amp;ssl=1 1416w" sizes="(max-width: 708px) 100vw, 708px" /><figcaption class="wp-element-caption">Tableau 的拖拉介面能加快資料探索，但分析價值仍來自問題定義與解讀。</figcaption></figure>



<h2 class="wp-block-heading">初學 Tableau 時，我遇到的五個自學難題</h2>



<h3 class="wp-block-heading">一、不知道該從哪裡開始</h3>



<p class="wp-block-paragraph">網路上的 Tableau 教學影片很多，但零碎學習容易變成看過一堆功能，卻沒有完整做完一個題目。我後來才發現，先固定一份資料與一個分析目標，再依照遇到的問題補學功能，比漫無目的地收藏影片有效得多。</p>



<h3 class="wp-block-heading">二、會做圖，卻不知道要分析什麼</h3>



<p class="wp-block-paragraph">剛開始很容易一打開 Tableau 就拖拉欄位，但做完圖後才發現沒有回答任何問題。製圖前可以先寫下：「營收是否成長？」「哪個品類貢獻最多？」「高營收商品是否也有高毛利？」分析問題不同，指標、維度與圖表選擇也會不同。</p>



<h3 class="wp-block-heading">三、找不到適合的練習資料</h3>



<p class="wp-block-paragraph">初學時不需要追求龐大或完美的資料。包含日期、商品、地區、銷售額、成本與訂單數的簡單資料表，就能練習多數基礎功能。開始前也要確認日期格式、空值、重複列與欄位型態，否則圖表出錯時，很難判斷是操作問題還是資料問題。</p>



<h3 class="wp-block-heading">四、維度、度量、計算與互動功能太多</h3>



<p class="wp-block-paragraph">維度、度量、圖表、計算欄位、篩選器與參數同時出現時，很容易不知道先學什麼。建議先理解欄位與資料型態，再依序練習基礎圖表、計算欄位、Dashboard、篩選器與參數。每完成一步都用原始資料核對幾筆數字，建立對聚合與篩選順序的敏感度。</p>



<h3 class="wp-block-heading">五、不知道作品集該放什麼</h3>



<p class="wp-block-paragraph">我第一次做作品時也不太有自信。後來我理解到，作品集的重點不只是證明自己會操作 Tableau，還要讓人看到你怎麼從資料中找出洞察、解決問題。除了 Dashboard，請一併寫出問題背景、資料來源、清理方式、指標定義、主要發現與行動建議。</p>



<h2 class="wp-block-heading">我的學習轉折：從 Power BI 經驗到真正學會 Tableau</h2>



<p class="wp-block-paragraph">我剛開始想透過官方資料與網路影片自學。因為當時已有 Microsoft Power BI 的使用經驗，我原本以為兩套資料視覺化工具的邏輯與操作方向應該差不多，於是先自己摸 Tableau 介面，遇到問題再查資料。</p>



<p class="wp-block-paragraph">這個方式持續幾週後，我其實非常挫折。即使都是視覺化工具，Tableau 的操作方式、公式邏輯與基礎圖表設定仍有不少差異。後來我改用系統化課程建立架構，再透過工作中的問題持續練習，才逐漸把零碎知識連起來。當時的課程是我的入門起點，但真正讓能力穩定下來的，仍是反覆完成實際分析。</p>



<h2 class="wp-block-heading">三個讓我真正理解 Tableau 的實務案例</h2>



<h3 class="wp-block-heading">預測分析：從前九個月推估第四季</h3>



<p class="wp-block-paragraph">透過折線圖觀察前九個月的趨勢，再延伸到第四季的預測，可以練習日期欄位、趨勢判讀與預測結果的呈現。實務上不能只放一條預測線，也要說明資料期間、季節性與預測的不確定性。</p>



<h3 class="wp-block-heading">RFM 模型：把客戶分群轉成行銷策略</h3>



<p class="wp-block-paragraph">RFM 會從最近一次消費時間（Recency）、消費頻率（Frequency）與消費金額（Monetary）進行客戶分群。我過去在行銷工作中也用過這套思考方式：找出高價值客戶、可能流失的客戶與需要培養的新客，再針對不同族群規劃溝通策略。</p>



<h3 class="wp-block-heading">地圖分析：從位置找出市場差異</h3>



<p class="wp-block-paragraph">地圖不只是把數字放到行政區上。真正的分析要比較地區營收、客戶密度、門市覆蓋或成長率，並留意不同地區的人口規模與資料完整度，避免只因總量較大就下錯結論。</p>



<h2 class="wp-block-heading">我完成的兩份 Tableau 作品</h2>



<p class="wp-block-paragraph">第一版作品是改良原本練習使用的設計架構，換成自己的資料與分析內容；第二版則使用 Tableau 的 Story 功能，把多個畫面組合成像簡報一樣的分析報告。這兩次練習讓我體會到：作品不需要一開始就很複雜，但一定要能清楚說明資料、問題與結論。</p>



<figure class="wp-block-image"><a href="#"><img data-recalc-dims="1" decoding="async" src="https://i0.wp.com/public.tableau.com/static/images/7G/7GNG4FGH9/1_rss.png?w=708&#038;ssl=1" alt="銷售利潤分析（城市） "/></a></figure>



<figure class="wp-block-image"><a href="#"><img data-recalc-dims="1" decoding="async" src="https://i0.wp.com/public.tableau.com/static/images/E-/E-commerceAnalysis_17360859499660/1/1_rss.png?w=708&#038;ssl=1" alt="Indian E-commerce Revenue Analysisby Sharon Wei "/></a></figure>



<h2 class="wp-block-heading">Tableau 自學路線：從零到作品集的四個階段</h2>



<h3 class="wp-block-heading">第一階段：資料連接與欄位觀念</h3>



<ul class="wp-block-list">
<li>連接 Excel 或 CSV，確認資料是否完整載入。</li>



<li>理解維度與度量、離散與連續欄位。</li>



<li>檢查日期、數字與文字欄位的資料型態。</li>



<li>學會篩選、排序與重新命名欄位。</li>
</ul>



<h3 class="wp-block-heading">第二階段：選擇能回答問題的圖表</h3>



<ul class="wp-block-list">
<li>折線圖：觀察營收、流量等時間趨勢。</li>



<li>長條圖：比較商品、地區或通路差異。</li>



<li>圓餅圖：在分類少、差異清楚時呈現組成。</li>



<li>散佈圖：觀察兩個數值之間的關係。</li>



<li>KPI 卡片：呈現總營收、訂單數與毛利率等核心指標。</li>
</ul>



<h3 class="wp-block-heading">第三階段：計算、參數與互動</h3>



<ul class="wp-block-list">
<li>建立毛利、成長率與客單價等計算欄位。</li>



<li>練習同比（YoY）、環比（MoM）與年初至今（YTD）。</li>



<li>加入篩選器、參數與動作，讓使用者切換觀察角度。</li>



<li>確認篩選前後的分母與聚合層級是否正確。</li>
</ul>



<h3 class="wp-block-heading">第四階段：完成 Dashboard 與分析說明</h3>



<p class="wp-block-paragraph">第一次可以做一頁銷售 Dashboard：上方放三個 KPI，中間放時間趨勢與品類比較，下方放詳細資料，再加入一個篩選器。完成後用三句話回答「發生了什麼、可能原因是什麼、下一步建議做什麼」。能清楚回答這三件事，才算完成一份數據分析作品。</p>



<h2 class="wp-block-heading">進階後，我怎麼繼續學 Tableau？</h2>



<p class="wp-block-paragraph">當基礎操作穩定後，可以再學 LOD 計算、參數應用、複雜公式、資料更新自動化與 Tableau Server。我的做法有兩個：遇到問題時先查 Tableau 官方學習資源；看到喜歡的 Tableau Public 作品時，若作者允許下載，就打開工作簿研究資料、圖表與互動設定，再從空白畫布重新做一次。</p>



<figure class="wp-block-image size-large"><img decoding="async" src="https://i0.wp.com/aderlab.com/wp-content/uploads/%E5%8F%AF%E5%AE%8C%E6%95%B4%E4%B8%8B%E8%BC%89-Tableau-%E4%BD%9C%E5%93%81%E7%9A%84%E6%AA%94%E6%A1%88%E7%AF%84%E4%BE%8B.png" alt="可完整下載 Tableau 作品的檔案範例" class="wp-image-5455"/><figcaption class="wp-element-caption">研究可下載的 Tableau Public 工作簿，再親手重做，是我常用的進階練習方法。</figcaption></figure>



<h2 class="wp-block-heading">Tableau 自學常見問題</h2>



<h3 class="wp-block-heading">完全沒有數據分析經驗，可以直接學 Tableau 嗎？</h3>



<p class="wp-block-paragraph">可以，但建議同步補充表格資料、指標與基礎統計觀念。只會操作工具，遇到實際商業問題時仍然很難做出可靠分析。</p>



<h3 class="wp-block-heading">學 Tableau 一定要先會 SQL 嗎？</h3>



<p class="wp-block-paragraph">入門時不一定，可以先用 Excel 或 CSV 練習；但如果目標是數據分析師，SQL 幾乎是不可缺少的能力。它能幫助你從資料庫取得正確資料，也能讓你理解資料表之間的關係。</p>



<h3 class="wp-block-heading">作品集適合使用 Tableau Public 嗎？</h3>



<p class="wp-block-paragraph">Tableau Public 很適合公開展示互動作品，但不要上傳公司資料、個資或機密內容。可以使用公開資料或清楚標示的模擬資料，並在作品說明中交代資料限制。</p>



<h2 class="wp-block-heading">接著學：我的 Tableau 系列教學</h2>



<p class="wp-block-paragraph">看完學習路線後，下一步就是挑一個主題實際操作。你可以依照目前程度，從基礎介面、圖表設計一路練到參數與時間比較：</p>



<ul class="wp-block-list">
<li><a href="https://aderlab.com/data-analytics/tableau-intro/"><strong>Tableau 初入門：產品差異、環境與特色功能</strong></a>：第一次使用 Tableau，先從工具與工作表、儀表板、Story 的差異開始。</li>



<li><a href="https://aderlab.com/data-analytics/tableau-pie-chart-1/"><strong>Tableau 圓餅圖設計技巧：哪些情況適合與不適合使用</strong></a>：練習資料組成，也學會避免常見的視覺誤判。</li>



<li><a href="https://aderlab.com/data-analytics/tableau-line-2/"><strong>Tableau 折線圖疊圖與延伸圖表教學</strong></a>：進一步呈現趨勢與分類差異。</li>



<li><a href="https://aderlab.com/data-analytics/tableau-dynamic-indicators/"><strong>Tableau 進階教學：動態切換圖表數據指標</strong></a>：練習參數、計算欄位與 Top 集合。</li>



<li><a href="https://aderlab.com/data-analytics/tableau-date-compared-advanced/"><strong>Tableau 進階教學：MOM、YOY、YTD 互動式報表</strong></a>：把時間比較做成可以切換的分析儀表板。</li>
</ul>



<p class="wp-block-paragraph">想學習更多Tableau技巧？更多教學文章：<a href="https://aderlab.com/data-analytics/tableau/">Tableau 系列教學文</a></p>



<p class="wp-block-paragraph">不要只收藏這篇文章。選一份資料、寫下三個商業問題，先完成一頁 Dashboard，再回頭檢查數字、版面與結論。當你能自己解釋「為什麼用這張圖」以及「看完資料後要採取什麼行動」，就已經更接近數據分析師的工作方式。</p>



<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide"/>



<p class="has-medium-font-size wp-block-paragraph"><strong>Buy me a coffee 用行動支持我的內容創作</strong></p>



<p class="wp-block-paragraph"><em>如果文章對你有幫助，歡迎用小額贊助支持 Sharon 持續分享數據分析實務。</em></p>



<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="wp-block-button aligncenter is-style-fill"><a class="wp-block-button__link has-black-color has-luminous-vivid-amber-background-color has-text-color has-background wp-element-button" href="https://www.buymeacoffee.com/aderlabsharon" target="_blank" rel="noreferrer noopener">以小額贊助支持 Sharon</a></div>
</div>
<p>這篇文章 <a href="https://aderlab.com/data-analytics/tableau-self-learning/">數據分析師必看！Tableau 自學指南：技能解析、應用實例與學習心得分享</a> 最早出現於 <a href="https://aderlab.com">Sharon Lab∣雪倫實驗室</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://aderlab.com/data-analytics/tableau-self-learning/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">5454</post-id>	</item>
	</channel>
</rss>
