Repository navigation
Expand file tree
/
Copy pathSQLQuery1.sql
More file actions
110 lines (95 loc) · 3.69 KB
/
Copy pathSQLQuery1.sql
File metadata and controls
110 lines (95 loc) · 3.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
-- Inspecting Data
SELECT * FROM [dbo].[sales_data_sample]
-- Checking Unique Values
SELECT DISTINCT status FROM [dbo].[sales_data_sample] -- Nice one to plot
SELECT DISTINCT year_id FROM [dbo].[sales_data_sample]
SELECT DISTINCT PRODUCTLINE FROM [dbo].[sales_data_sample] -- Nice one to plot
SELECT DISTINCT COUNTRY FROM [dbo].[sales_data_sample] -- Nice one to plot
SELECT DISTINCT DEALSIZE FROM [dbo].[sales_data_sample] -- Nice one to plot
SELECT DISTINCT TERRITORY FROM [dbo].[sales_data_sample] -- Nice one to plot
-- ANALYSIS
-- Grouping sales by productline
SELECT PRODUCTLINE, SUM(sales) as Revenue
FROM [dbo].[sales_data_sample]
GROUP BY PRODUCTLINE
ORDER BY 2 DESC
SELECT YEAR_ID, SUM(sales) as Revenue
FROM [dbo].[sales_data_sample]
GROUP BY YEAR_ID
ORDER BY 2 DESC
SELECT DISTINCT MONTH_ID FROM [dbo].[sales_data_sample]
WHERE YEAR_ID = 2005
SELECT DEALSIZE, SUM(sales) as Revenue
FROM [dbo].[sales_data_sample]
GROUP BY DEALSIZE
ORDER BY 2 DESC
-- What was the best month for sales in a specific year? How much we earned that year?
SELECT MONTH_ID, SUM(sales) Revenue, COUNT(ORDERNUMBER) Frequency
FROM [dbo].[sales_data_sample]
WHERE YEAR_ID = 2004 -- Change year to see the rest
GROUP BY MONTH_ID
ORDER BY 2 DESC
-- November is the best month evidently, what product do they sell in November? (Classic)
SELECT MONTH_ID, PRODUCTLINE, SUM(sales) Revenue, COUNT(ORDERNUMBER) Frequency
FROM [dbo].[sales_data_sample]
WHERE YEAR_ID = 2004 and MONTH_ID = 11-- Change year to see the rest
GROUP BY MONTH_ID, PRODUCTLINE
ORDER BY 3 DESC
-- Who is our best customer (Performing RFM Analysis)
DROP TABLE IF EXISTS #rfm
;with rfm as
(
SELECT
CUSTOMERNAME,
SUM(sales) MonetaryValue,
AVG(sales) AvgMonetaryValue,
COUNT(ORDERNUMBER) Frequency,
MAX(ORDERDATE) last_order_date,
(SELECT MAX(ORDERDATE) FROM [dbo].[sales_data_sample]) max_order_date,
DATEDIFF(DD, max(ORDERDATE), (SELECT MAX(ORDERDATE) FROM [dbo].[sales_data_sample])) Recency
FROM [dbo].[sales_data_sample]
GROUP BY CUSTOMERNAME
), rfm_calc AS
(
SELECT r.*,
NTILE(4) OVER (ORDER BY Recency DESC) rfm_recency,
NTILE(4) OVER (ORDER BY Frequency) rfm_frequency,
NTILE(4) OVER (ORDER BY AvgMonetaryValue) rfm_monetary
FROM rfm r
)
SELECT
c.*, rfm_recency+rfm_frequency+rfm_monetary AS rfm_cell,
cast(rfm_recency AS varchar) + cast(rfm_frequency AS varchar) + cast(rfm_monetary AS varchar) AS rfm_cell_string
INTO #rfm
FROM rfm_calc c
SELECT CUSTOMERNAME, rfm_recency, rfm_frequency, rfm_monetary,
CASE
WHEN rfm_cell_string in (111, 112, 121, 122, 123, 132, 211, 212, 114, 141) THEN 'lost_customers' -- lost customers
WHEN rfm_cell_string in (133, 134, 143, 244, 334, 343, 344, 144) THEN 'slipping away, cannot lose' -- Big spenders who're slipping away
WHEN rfm_cell_string in (311, 411, 331) THEN 'new customers'
WHEN rfm_cell_string in (222, 223, 233, 322) THEN 'potential churners'
WHEN rfm_cell_string in (323, 333, 321, 422, 332, 432) THEN 'active' -- Customers who buy often, but at lower price points
WHEN rfm_cell_string in (433, 434, 443, 444) THEN 'loyal'
END rfm_segment
FROM #rfm
-- What products are often sold together?
-- SELECT * FROM [dbo].[sales_data_sample] WHERE ORDERNUMBER = 10411
SELECT DISTINCT ORDERNUMBER, STUFF(
(SELECT ',' + PRODUCTCODE
FROM [dbo].[sales_data_sample] p
WHERE ORDERNUMBER in
(
SELECT ORDERNUMBER
FROM (
SELECT ORDERNUMBER, COUNT(*) rn
FROM [dbo].[sales_data_sample]
WHERE STATUS = 'Shipped'
GROUP BY ORDERNUMBER
)m
WHERE rn = 3
)
AND p.ORDERNUMBER = s.ORDERNUMBER
FOR xml path (''))
, 1, 1, '') ProductCodes
FROM [dbo].[sales_data_sample] s
ORDER BY 2 DESC