-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPhase-4 - Product & Profitabilities.sql
More file actions
116 lines (97 loc) · 3.06 KB
/
Copy pathPhase-4 - Product & Profitabilities.sql
File metadata and controls
116 lines (97 loc) · 3.06 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
111
112
113
114
115
116
/****************************************************************************************
Phase 4: Product and Profitabilty Analysis
*****************************************************************************************/
USE WEBANALYSIS
/*
Now write the query showing for each product:
Product name
Total units sold
Total revenue
Total COGS
Total profit
Profit margin %
*/
WITH CTE1 AS (
SELECT
P.product_name,
O.PRICE_USD,
COUNT(ORDER_ITEM_ID) AS TOTAL_UNIT_SOLD,
SUM(PRICE_USD) AS TOTAL_REVENUE,
SUM(COGS_USD) AS TOTAL_COGS,
SUM(PRICE_USD) - SUM(COGS_USD) AS TOTAL_PROFIT,
(SUM(PRICE_USD) - SUM(COGS_USD)) / SUM(PRICE_USD) * 100.0 AS PROFIT_PERC
FROM order_items AS O
LEFT JOIN products AS P
ON P.product_id = O.product_id
GROUP BY P.product_name , O.price_usd
)
-- PERCENTAGE OF REVENUE BY PRODUCTS
SELECT
PRODUCT_NAME,
PRICE_USD,
SUM(TOTAL_REVENUE) OVER() AS OVERALL_REVENUE,
TOTAL_REVENUE,
TOTAL_REVENUE / SUM(TOTAL_REVENUE) OVER() * 100.0 AS PERCN
FROM CTE1
/****************************************************************************************
Phase 5: REFUND Analysis
*****************************************************************************************/
SELECT * FROM REFUNDS
/*
Now build the refund analysis.
Which tables do you need to calculate refund rate per product?
Tell me the tables and join keys before writing the query.
-------------------------------------------------------
order_item_refunds > order_items > products
-------------------------------------------
Now write the query showing per product:
Total units sold
Total refunds
Refund rate %
Total refund amount lost
--------------------------------------------*/
SELECT
P.product_name,
COUNT(O.order_item_id) AS TOTAL_UNIT,
COUNT(R.ORDER_ITEM_REFUND_ID) AS TOTAL_REFUND,
(COUNT(R.ORDER_ITEM_REFUND_ID) * 100.0 ) / COALESCE (COUNT(O.order_item_id),0) AS REFUND_RATE,
SUM(REFUND_AMOUNT_USD) AS TOTAL_REFUND_AMOUNT
FROM order_items AS O
LEFT JOIN REFUNDS AS R
ON R.order_item_id = O.order_item_id
LEFT JOIN products AS P
ON O.product_id = P.product_id
GROUP BY P.product_name
/****************************************************************************************
Phase 4 & 5: COMBINE Analysis
*****************************************************************************************/
/*
Product name
Gross revenue
Total refunds amount
Net revenue (gross - refunds)
Total COGS
Net profit (net revenue - COGS)
Net margin %
*/
USE WEBANALYSIS
WITH CTE1 AS
(
SELECT
P.product_name,
SUM(O.PRICE_USD) AS GROSS_REVENUE,
SUM(R.REFUND_AMOUNT_USD) AS TOTAL_REFUND,
SUM(O.PRICE_USD) - SUM(R.REFUND_AMOUNT_USD) AS NET_REVENUE,
SUM(O.COGS_USD) AS TOTAL_COGS,
(SUM(O.PRICE_USD) - SUM(R.REFUND_AMOUNT_USD)) - SUM(O.COGS_USD) AS NET_PROFIT
FROM order_items AS O
LEFT JOIN REFUNDS AS R
ON O.order_item_id = R.order_item_id
LEFT JOIN products AS P
ON O.product_id = P.product_id
GROUP BY P.product_name
)
SELECT
*,
NET_PROFIT / GROSS_REVENUE * 100.0 AS NET_MAGIN_PER
FROM CTE1