-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSQL iKame Test.sql
83 lines (70 loc) · 2.21 KB
/
SQL iKame Test.sql
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
/*
**Q4.1**
*/
WITH sales AS (
SELECT ProductName,
SalesTerritoryRegion,
SUM(SalesAmount) AS total_sales
FROM f_sales
LEFT JOIN d_sales_territory ON f_sales.SalesTerritoryKey = d_sales_territory.SalesTerritoryKey
LEFT JOIN d_product ON f_sales.ProductKey = d_product.ProductKey
GROUP BY ProductName, SalesTerritoryRegion
)
WITH ranked_sales AS (
SELECT ProductName,
SalesTerritoryRegion,
total_sales,
RANK() OVER (PARTITION BY SalesTerritoryRegion ORDER BY total_sales DESC) AS sales_rank
FROM sales
)
SELECT ProductName,
SalesTerritoryRegion,
total_sales
FROM ranked_sales
WHERE sales_rank <= 3;
/*
**Q4.2**
*/
WITH purchases AS (
SELECT CustomerKey,
SalesTerritoryRegion,
OrderDate,
ROW_NUMBER() OVER (PARTITION BY CustomerKey ORDER BY OrderDate) AS purchase_number
FROM f_sales
LEFT JOIN d_sales_territory ON f_sales.SalesTerritoryKey = d_sales_territory.SalesTerritoryKey
)
WITH first_second_purchases AS (
SELECT CustomerKey,
SalesTerritoryRegion,
MIN(CASE WHEN purchase_number = 1 THEN OrderDate END) AS first_purchase,
MIN(CASE WHEN purchase_number = 2 THEN OrderDate END) AS second_purchase
FROM purchases
WHERE purchase_number IN (1, 2)
GROUP BY CustomerKey, SalesTerritoryRegion
)
SELECT SalesTerritoryRegion,
AVG(DATEDIFF(day, first_purchase, second_purchase)) AS avg_days_between_first_second_purchase
FROM first_second_purchases
GROUP BY SalesTerritoryRegion;
/*
**Q4.3**
*/
WITH customer_age AS (
SELECT CustomerKey,
DATEDIFF(YY, BirthYear, 2014) AS age
FROM d_customer
)
WITH customer_age_group AS (
SELECT CustomerKey,
CASE
WHEN age < 25 THEN '<25'
WHEN age BETWEEN 25 AND 50 THEN '25-50'
ELSE '>50'
END AS age_group
FROM customer_age
)
SELECT age_group,
MEDIAN(SalesAmount) AS median_revenue
FROM customer_age_group
RIGHT JOIN f_sales ON customer_age_group.CustomerKey = f_sales.CustomerKey
GROUP BY age_group;