追蹤銷售額是瞭解你的業務的一部分,例如銷量和找出最佳顧客。為此,你可能希望從取得有關在整個月、季度、年度或其他時段內購買最多的顧客的資料開始。這些資料能讓你分析他們的購買模式並確定趨勢。本文將透過將非常有用的 Count() 函式與 GROUP BY 和 HAVING 子句結合來提供一些範例查詢。
基本查詢
我們將在 Sakila 範例資料庫執行查詢。這是一個很好的正規化結構,建模 DVD 租賃商店,包括 film、actor、film-actor 關係等內容,以及連接 film、store 和 rental 的中央 inventory 資料表。因此,它的顧客不是購買電影,而是租借電影。儘管如此,選取資料的標準保持不變,即根據 customer_id 計算主 rental 資料表的列數和分組結果的數目。以下是Navicat Premium 16 中的一個基本查詢,它將結果限制為總共租借超過 20 部電影的顧客:
這是以 customer_id 排序的結果。稍後,我們將以 num_of_films_rented 排序結果。
取得其他顧客詳細資料
雖然上述查詢足以找到那些租借了許多電影的顧客,但除了他們的 ID 之外,它沒有提供任何顧客詳細資料。若要包含更多顧客資料,我們需要加入 customer 資料表。它應該是用 LEFT JOIN,以便只有租過電影的顧客才能聯結至主查詢。以下是加入了顧客名稱的結果:
篩選結果
到目前為止,我們已取得非常廣泛的資料,包括所有電影和時段的結果。我們可以針對電影根據類別和時段來取得更具體的資訊。為此,我們需要加入更多資料表。如果你不確定如何將資料表加入查詢,你可以在 Navicat 的物件窗格中選取資料表,然後執行逆向資料表到模型...命令:
這會將資料表加入至建模工具中的結構圖表中,你就可以很容易檢視它們的關係:
在修改後的查詢中,我們將結果限制為 2005 年租借的喜劇:
請注意,由於單個類別的租借量較少,最小電影數量已降至 5 或更多。
根據計數排序
也許你更想根據租借量檢視記錄。要做到這一點,只需包含一個 ORDER BY 子句。以下是最終的查詢,根據 num_of_films_rented 以遞減(DESC)順序來排序,因此 2005 年租用喜劇最多的顧客會在結果的最上面:
總結
在今天的文章中,我們學習了如何將 Count() 函式與 GROUP BY 和 HAVING 子句結合使用,以深入了解顧客的消費習慣。正如你想像的那樣,可以使用相同的查詢結構來發現與產品銷售和/或租賃相關的各種趨勢和模式。而收集到的見解可以為指導組織決策帶來巨大效益。