This repository contains SQL queries to perform data analysis on pizza sales data. The analysis covers various aspects such as order quantities, revenue, pizza preferences, and temporal patterns.
SELECT
COUNT(order_id) AS Total_Orders
FROM
orders;
- Total Revenue Generated from Pizza Sales
SELECT
ROUND(SUM(orders_details.quantity * pizzas.price), 2) AS Total_Sales
FROM orders_details
JOIN pizzas
ON pizzas.pizza_id = orders_details.pizza_id;
- Highest-Priced Pizza
SELECT pizza_types.name, pizzas.price
FROM pizza_types
JOIN pizzas
ON pizza_types.pizza_type_id = pizzas.pizza_type_id
ORDER BY pizzas.price DESC
LIMIT 1;
- Count of Pizza Size Ordered
select pizzas.size, count(orders_details.order_details_id) AS orders_count
from pizzas
join orders_details
on pizzas.pizza_id = orders_details.pizza_id
group by pizzas.size
order by orders_count desc;
- Top 5 Most Ordered Pizza Types along with Their Quantities
SELECT pizza_types.name,
sum(orders_details.quantity) as quantity
from pizza_types
join pizzas
on pizza_types.pizza_type_id = pizzas.pizza_type_id
join orders_details
on orders_details.pizza_id = pizzas.pizza_id
group by pizza_types.name
order by quantity desc
limit 5;
- Total Quantity of Each Pizza Category Ordered
SELECT
pizza_types.category,
SUM(orders_details.quantity) AS quantity
FROM
pizza_types
JOIN
pizzas ON pizza_types.pizza_type_id = pizzas.pizza_type_id
JOIN
orders_details ON orders_details.pizza_id = pizzas.pizza_id
GROUP BY pizza_types.
- Distribution of Orders by Hour of the Day
SELECT
DATEPART(HOUR, order_time) as hours,
COUNT(order_id) AS ORDERS
FROM
orders
GROUP BY
DATEPART(HOUR, order_time)
order by hours;
- Category-wise Distribution of Pizzas
SELECT category, COUNT(name) as total
FROM pizza_types
group by category;
- Average Number of Pizzas Ordered per Day
SELECT
ROUND(AVG(quantity), 0) AS average_order_quantity
FROM
(SELECT
orders.order_date AS date,
SUM(orders_details.quantity) AS quantity
FROM
orders
JOIN orders_details ON orders.order_id = orders_details.order_id
GROUP BY date) AS order_quantity;
- Top 3 Most Ordered Pizza Types Based on Revenue
SELECT
pt.name AS names,
ROUND(SUM(od.quantity * p.price), 0) AS revenue
FROM
pizza_types pt
JOIN pizzas p ON p.pizza_type_id = pt.pizza_type_id
JOIN orders_details od ON od.pizza_id = p.pizza_id
GROUP BY pt.name
ORDER BY revenue DESC
OFFSET 0 ROWS FETCH NEXT 3 ROWS ONLY;
- Percentage Contribution of Each Pizza Type to Total Revenue
SELECT
pizza_types.category,
ROUND((SUM(orders_details.quantity * pizzas.price) / (SELECT
ROUND(SUM(orders_details.quantity * pizzas.price),
2) AS total_sales
FROM
orders_details
JOIN
pizzas ON pizzas.pizza_id = orders_details.pizza_id)) * 100,
2) AS revenue
FROM
pizza_types
JOIN
pizzas ON pizza_types.pizza_type_id = pizzas.pizza_type_id
JOIN
orders_details ON orders_details.pizza_id = pizzas.pizza_id
GROUP BY pizza_types.category
ORDER BY revenue DESC;
- Cumulative Revenue Generated Over Time
select order_date,
sum(revenue) over(order by order_date) as cuml_revenue
from
(select orders.order_date,
round(sum(orders_details.quantity * pizzas.price),0) as revenue
from orders_details
join pizzas
on orders_details.pizza_id = pizzas.pizza_id
join orders
on orders.order_id = orders_details.order_id
group by orders.order_date) as sales;
- Top 3 Most Ordered Pizza Types Based on Revenue for Each Pizza Category
SELECT name,revenue
FROM
(SELECT
category, name, revenue,
RANK() OVER(PARTITION BY category ORDER BY revenue desc) as rn
FROM
(SELECT
pizza_types.category,
pizza_types.name,
SUM(orders_details.quantity * pizzas.price) AS revenue
FROM
pizza_types
JOIN pizzas
ON pizza_types.pizza_type_id = pizzas.pizza_type_id
JOIN orders_details
ON orders_details.pizza_id = pizzas.pizza_id
GROUP BY pizza_types.category , pizza_types.name
)as a
)as b;