-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathZepto_SQL.sql
More file actions
83 lines (72 loc) · 2.14 KB
/
Zepto_SQL.sql
File metadata and controls
83 lines (72 loc) · 2.14 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
drop table if exists zepto;
create table zepto (
sku_id SERIAL PRIMARY KEY,
category VARCHAR(120),
name VARCHAR(150) NOT NULL,
mrp NUMERIC(8,2),
discountPercent NUMERIC(5,2),
availableQuantity INTEGER,
discountedSellingPrice NUMERIC(8,2),
weightInGms INTEGER,
outOfStock BOOLEAN,
quantity INTEGER
);
-- View all rows
SELECT * FROM zepto;
-- Count total records
SELECT COUNT(*) FROM zepto;
--Q1. Total Revenue (MRP & Selling Price) per Category
select
Category,
sum(mrp) as Total_mrp,
sum(discountedsellingprice) as Total_selling_price
from zepto
group by category
order by Total_mrp desc;
--Q2. Average Discount Percent per Category
select
Category,
round(avg(discountpercent),2) as discount_percentage
from zepto
group by category
order by discount_percentage desc;
--Q3. Top 3 Most Expensive Items per Category
select * from
(select Category, name, mrp,
rank() over (partition by Category order by mrp desc) as rnk
from zepto)
where rnk <=3;
--Q4. Running Total of Available Quantity
SELECT Category, name, mrp, availableQuantity,
SUM(availableQuantity) OVER (PARTITION BY Category ORDER BY mrp) as running_total
FROM zepto;
--Q5. Categories with Above-Average Discounts
WITH OverallAvg AS (
SELECT AVG(discountPercent) as global_avg FROM zepto
),
CategoryAvg AS (
SELECT Category, AVG(discountPercent) as cat_avg FROM zepto GROUP BY Category
)
SELECT * FROM CategoryAvg
JOIN OverallAvg ON CategoryAvg.cat_avg > OverallAvg.global_avg;
--Q6. Price Difference from Category Average
SELECT name, mrp,
AVG(mrp) OVER (PARTITION BY Category) as cat_avg_mrp,
mrp - AVG(mrp) OVER (PARTITION BY Category) as diff_from_avg
FROM zepto;
--Q7. Stock Availability Count
SELECT
Category,
SUM(CASE WHEN outOfStock = 'FALSE' THEN 1 ELSE 0 END) AS In_Stock,
SUM(CASE WHEN outOfStock = 'TRUE' THEN 1 ELSE 0 END) AS Out_of_Stock
FROM zepto_products
GROUP BY Category;
--Q8."Premium" Items Identification
WITH Stats AS (
SELECT Category, PERCENTILE_CONT(0.9) WITHIN GROUP (ORDER BY mrp) as p90
FROM zepto GROUP BY Category
)
SELECT z.name, z.mrp
FROM zepto z
JOIN Stats s ON z.Category = s.Category
WHERE z.mrp > s.p90;