0% found this document useful (0 votes)
33 views17 pages

Business Report - Suchita - Bhovar - SQL

Uploaded by

suchita
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
33 views17 pages

Business Report - Suchita - Bhovar - SQL

Uploaded by

suchita
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 17

Business Report

Mrs. Suchita Bhovar

PGD-DSBA (PGPDSBA.O. SEP23.C)

SQL Project - Coded


INDEX
Table Nos Particulars Page Nos

1.1 Query 1 3

2.1 Query 2 4

3.1 Query 3 5

4.1 Query 4 6

5.1 Query 5 7

6.1 Query 6 8

7.1 Query 7 9

8.1 Query 8 (a) 11

8.2 Query 8 (b) 13

8.3 Query 8 (c) 15

9.1 Query 9 16

10.1 Query 10 17
1. WRITE A QUERY TO DISPLAY CUSTOMER FULL NAME WITH THEIR TITLE
(MR/MS), BOTH FIRST NAME AND LAST NAME ARE IN UPPER CASE WITH
-- CUSTOMER EMAIL ID, CUSTOMER CREATIONDATE AND DISPLAY
CUSTOMER’S CATEGORY AFTER APPLYING BELOW CATEGORIZATION
RULES:
-- i.IF CUSTOMER CREATION DATE YEAR <2005 THEN CATEGORY A
-- ii.IF CUSTOMER CREATION DATE YEAR >=2005 AND <2011 THEN
CATEGORY B
-- iii.IF CUSTOMER CREATION DATE YEAR>= 2011 THEN CATEGORY C
-- HINT: USE CASE STATEMENT, NO PERMANENT CHANGE IN TABLE
REQUIRED. [NOTE: TABLES TO BE USED -ONLINE_CUSTOMER TABLE

Solution 1: -
use orders;
select concat(case CUSTOMER_GENDER when 'M' then 'Mr.' when 'F' then 'Ms.' end ,'
',upper(CUSTOMER_FNAME),' ' ,upper(CUSTOMER_LNAME) ) as
Customer_full_name,CUSTOMER_EMAIL,CUSTOMER_CREATION_DATE,
case when year(CUSTOMER_CREATION_DATE)<2005 then 'A'
when 2005<=year(CUSTOMER_CREATION_DATE) and
year(CUSTOMER_CREATION_DATE)<2011 then 'B'
else 'C'
end as Customers_Category from online_customer;
Output 1: -
Table 1.1 (Query 1)
2. WRITE A QUERY TO DISPLAY THE FOLLOWING INFORMATION FOR THE
PRODUCTS, WHICH HAVE NOT BEEN SOLD: PRODUCT_ID, PRODUCT_DESC,
-- PRODUCT_QUANTITY_AVAIL, PRODUCT_PRICE,INVENTORY
VALUES(PRODUCT_QUANTITY_AVAIL*PRODUCT_PRICE), NEW_PRICE
AFTER APPLYING DISCOUNT
-- AS PER BELOW CRITERIA. SORT THE OUTPUT WITH RESPECT TO
DECREASING VALUE OF INVENTORY_VALUE.
-- i.IF PRODUCT PRICE > 20,000 THEN APPLY 20% DISCOUNT
-- ii.IF PRODUCT PRICE > 10,000 THEN APPLY 15% DISCOUNT
-- iii.IF PRODUCT PRICE =< 10,000 THEN APPLY 10% DISCOUNT

-- HINT: USE CASE STATEMENT, NO PERMANENT CHANGE IN TABLE


REQUIRED. [NOTE: TABLES TO BE USED -PRODUCT, ORDER_ITEMS TABLE]

Solution 2: -
use orders;
show tables;
select * from product
select product_id, product_desc,product_quantity_avail, product_price,
(product_quantity_avail*product_price) as inventory_values,
case when product_price > 200000 then (product_price*20)/100
when product_price > 100000 then (product_price*15)/100
when product_price <= 100000 then (product_price*10)/100
end as New_Price from product
order by inventory_values desc;
Output 2: -
Table 2.1 (Query 2)
3. WRITE A QUERY TO DISPLAY PRODUCT_CLASS_CODE,
PRODUCT_CLASS_DESCRIPTION, COUNT OF PRODUCT TYPE IN EACH
PRODUCT CLASS,
-- INVENTORY VALUE (P.PRODUCT_QUANTITY_AVAIL*P.PRODUCT_PRICE).
INFORMATION SHOULD BE DISPLAYED FOR ONLY THOSE
PRODUCT_CLASS_CODE
-- WHICH HAVE MORE THAN 1,00,000 INVENTORY VALUE. SORT THE OUTPUT
WITH RESPECT TO DECREASING VALUE OF INVENTORY_VALUE.
-- [NOTE: TABLES TO BE USED -PRODUCT, PRODUCT_CLASS]

Solution 3: -
use orders;
select pc.PRODUCT_CLASS_CODE as Product_class_code, pc.PRODUCT_CLASS_DESC
as Product_class_description,
sum(p.PRODUCT_QUANTITY_AVAIL * p.PRODUCT_PRICE) as Inventory_Value,
count( pc.PRODUCT_CLASS_CODE ) as countof_product_type
from orders.PRODUCT p
left join orders.PRODUCT_CLASS pc on p.PRODUCT_CLASS_CODE =
pc.PRODUCT_CLASS_CODE
group BY pc.PRODUCT_CLASS_CODE having Inventory_Value > 100000
order BY Inventory_Value DESC;
Output 3: -
Table 3.1 (Query 3)
4. WRITE A QUERY TO DISPLAY CUSTOMER_ID, FULL NAME,
CUSTOMER_EMAIL, CUSTOMER_PHONE AND COUNTRY OF CUSTOMERS
WHO HAVE CANCELLED
-- ALL THE ORDERS PLACED BY THEM(USE SUB-QUERY)
-- [NOTE: TABLES TO BE USED - ONLINE_CUSTOMER, ADDRESSS,
ORDER_HEADER]

Solution 4: -
select o.customer_id,concat(upper(o.customer_fname),' ',upper(o.customer_lname))
Full_Name,o.customer_email, o.customer_phone,a.country from online_customer
o inner join address a using (Address_id) inner join order_header using (customer_id) where
Order_status= 'Cancelled';
Output 4: -
Table 4.1 (Query 4)
5. WRITE A QUERY TO DISPLAY SHIPPER NAME, CITY TO WHICH IT IS
CATERING, NUMBER OF CUSTOMER CATERED BY THE SHIPPER IN THE
CITY AND
-- NUMBER OF CONSIGNMENTS DELIVERED TO THAT CITY FOR SHIPPER
DHL(9 ROWS)
-- [NOTE: TABLES TO BE USED -SHIPPER, ONLINE_CUSTOMER,
ADDRESSS, ORDER_HEADER]

Solution 5: -
select B.SHIPPER_NAME, B.CITY, Count(Distinct A.CUSTOMER_ID)
CUSTOMER_COUN from ORDER_HEADER A,
(select A.SHIPPER_NAME, A.SHIPPER_ID, B.City, B.ADDRESS_ID from SHIPPER A,
ADDRESS B
where A.SHIPPER_ADDRESS = B.ADDRESS_ID and A.SHIPPER_NAME = 'DHL') B
where A.SHIPPER_ID = B.SHIPPER_ID Group by B.SHIPPER_NAME,B.City;
Output 5:-
Table 5.1 (Query 5)
6. WRITE A QUERY TO DISPLAY CUSTOMER ID, CUSTOMER FULL NAME,
TOTAL QUANTITY AND TOTAL VALUE (QUANTITY*PRICE) SHIPPED WHERE
MODE
-- OF PAYMENT IS CASH AND CUSTOMER LAST NAME STARTS WITH 'G'
-- [NOTE: TABLES TO BE USED -ONLINE_CUSTOMER, ORDER_ITEMS,
PRODUCT, ORDER_HEADER]
Solution 6: -
select * from ORDER_ITEMS; select* from ORDER_HEADER; select
OC.CUSTOMER_ID,concat(OC.CUSTOMER_FNAME,' ',OC.CUSTOMER_LNAME) as
FULL_NAME,
count(OI.PRODUCT_QUANTITY) as TOTAL_QUANTITY,
sum(OI.PRODUCT_QUANTITY * P.PRODUCT_PRICE) as TOTAL_VALUE from
ONLINE_CUSTOMER OC
inner join ORDER_HEADER OH using (CUSTOMER_ID) inner join ORDER_ITEMS OI
using(ORDER_ID) inner join PRODUCT P
using (PRODUCT_ID) where ORDER_STATUS = 'Shipped' and payment_mode='Cash' and
CUSTOMER_LNAME like 'G%' group by CUSTOMER_ID;
Output 6:-
Table 6.1 (Query 6)
QUESTION NO. 7Write a query to display order_id and volume of the biggest order (in
terms of volume) that can fit in
-- carton id 10
Solution 7: -
select * from carton;
WITH ORDER_VOLUME as (SELECT ORDER_ITEMS.ORDER_ID, (PRODUCT.LEN *
PRODUCT.WIDTH * PRODUCT.HEIGHT)
VOLUME FROM ORDER_ITEMS JOIN PRODUCT ON PRODUCT.PRODUCT_ID =
ORDER_ITEMS.PRODUCT_ID), carton_10_volume as (SELECT(CARTON.LEN *
CARTON.WIDTH * CARTON.HEIGHT) CARTON_10_VOLUME FROM CARTON
WHERE CARTON_ID = 10)
SELECT ORDER_VOLUME.ORDER_ID, ORDER_VOLUME.VOLUME FROM
ORDER_VOLUME,carton_10_volume
WHERE ORDER_VOLUME.VOLUME <= carton_10_volume.CARTON_10_VOLUME
ORDER BY ORDER_VOLUME.VOLUME DESC limit 1;
Output 7:-
Table 7.1 (Query 7)
8. WRITE A QUERY TO DISPLAY PRODUCT_ID, PRODUCT_DESC,
PRODUCT_QUANTITY_AVAIL, QUANTITY SOLD, AND SHOW INVENTORY
STATUS OF
-- PRODUCTS AS BELOW AS PER BELOW CONDITION:
-- A.FOR ELECTRONICS AND COMPUTER CATEGORIES,
-- i.IF SALES TILL DATE IS ZERO THEN SHOW 'NO SALES IN
PAST, GIVE DISCOUNT TO REDUCE INVENTORY',
-- ii.IF INVENTORY QUANTITY IS LESS THAN 10% OF QUANTITY SOLD,
SHOW 'LOW INVENTORY, NEED TO ADD INVENTORY',
-- iii.IF INVENTORY QUANTITY IS LESS THAN 50% OF QUANTITY SOLD,
SHOW 'MEDIUM INVENTORY, NEED TO ADD SOME INVENTORY',
-- iv.IF INVENTORY QUANTITY IS MORE OR EQUAL TO 50% OF
QUANTITY SOLD, SHOW 'SUFFICIENT
INVENTORY'PRODUCT_IDPRODUCT_DESCPRODUCT_CLASS_CODEPRODUC
T_PRICEPRODUCT_QUANTITY_AVAIL

Solution 8(a): -
SELECT
P.PRODUCT_DESC,
PC.PRODUCT_CLASS_DESC,
P.PRODUCT_QUANTITY_AVAIL,
COUNT(OI.PRODUCT_QUANTITY) AS SOLD_QUANTITY,
(P.PRODUCT_QUANTITY_AVAIL / (P.PRODUCT_QUANTITY_AVAIL +
COUNT(OI.PRODUCT_QUANTITY))) * 100 AS AVAILABLE_QTY_PRC,
CASE
WHEN (P.PRODUCT_QUANTITY_AVAIL / (P.PRODUCT_QUANTITY_AVAIL +
COUNT(OI.PRODUCT_QUANTITY))) * 100 < 10 THEN 'Low inventory, need to add
inventory'
WHEN (P.PRODUCT_QUANTITY_AVAIL / (P.PRODUCT_QUANTITY_AVAIL +
COUNT(OI.PRODUCT_QUANTITY))) * 100 < 50 THEN 'Medium inventory, need to add
some inventory'
WHEN (P.PRODUCT_QUANTITY_AVAIL / (P.PRODUCT_QUANTITY_AVAIL +
COUNT(OI.PRODUCT_QUANTITY))) * 100 >= 50 THEN 'Sufficient inventory'
ELSE 'No sales in past, give discount to reduce inventory'
END AS INVENTORY_STATUS
FROM
PRODUCT_CLASS PC
INNER JOIN
PRODUCT P ON P.PRODUCT_CLASS_CODE = PC.PRODUCT_CLASS_CODE
INNER JOIN
ORDER_ITEMS OI ON OI.PRODUCT_ID = P.PRODUCT_ID
INNER JOIN
ORDER_HEADER OH ON OH.ORDER_ID = OI.ORDER_ID
WHERE
PC.PRODUCT_CLASS_DESC IN ('Electronics', 'Computer')
AND OH.ORDER_STATUS = 'Shipped'
GROUP BY
P.PRODUCT_DESC,
PC.PRODUCT_CLASS_DESC,
P.PRODUCT_QUANTITY_AVAIL;
Output 8(a):-
Table 8.1 (Query 8(a))
Question No. 8 (b)
B. FOR MOBILES AND WATCHES CATEGORIES,
-- i.IF SALES TILL DATE IS ZERO THEN SHOW 'NO SALES IN PAST,
GIVE DISCOUNT TO REDUCE INVENTORY',
-- ii.IF INVENTORY QUANTITY IS LESS THAN 20% OF QUANTITY SOLD,
SHOW 'LOW INVENTORY, NEED TO ADD INVENTORY',
-- iii.IF INVENTORY QUANTITY IS LESS THAN 60% OF QUANTITY SOLD,
SHOW 'MEDIUM INVENTORY, NEED TO ADD SOME INVENTORY',
-- iv.IF INVENTORY QUANTITY IS MORE OR EQUAL TO 60% OF QUANTITY
SOLD, SHOW 'SUFFICIENT INVENTORY'
Solution 8(b): -
SELECT
P.PRODUCT_DESC,
PC.PRODUCT_CLASS_DESC,
P.PRODUCT_QUANTITY_AVAIL,
COUNT(OI.PRODUCT_QUANTITY) AS SOLD_QUANTITY,
(P.PRODUCT_QUANTITY_AVAIL / (P.PRODUCT_QUANTITY_AVAIL +
COUNT(OI.PRODUCT_QUANTITY))) * 100 AS AVAILABLE_QTY_PRC,
CASE
WHEN (P.PRODUCT_QUANTITY_AVAIL / (P.PRODUCT_QUANTITY_AVAIL +
COUNT(OI.PRODUCT_QUANTITY))) * 100 < 20 THEN 'Low inventory, need to add
inventory'
WHEN (P.PRODUCT_QUANTITY_AVAIL / (P.PRODUCT_QUANTITY_AVAIL +
COUNT(OI.PRODUCT_QUANTITY))) * 100 < 60 THEN 'Medium inventory, need to add
some inventory'
WHEN (P.PRODUCT_QUANTITY_AVAIL / (P.PRODUCT_QUANTITY_AVAIL +
COUNT(OI.PRODUCT_QUANTITY))) * 100 >= 60 THEN 'Sufficient inventory'
ELSE 'No sales in past, give discount to reduce inventory'
END AS INVENTORY_STATUS
FROM
PRODUCT_CLASS PC
INNER JOIN
PRODUCT P ON P.PRODUCT_CLASS_CODE = PC.PRODUCT_CLASS_CODE
INNER JOIN
ORDER_ITEMS OI ON OI.PRODUCT_ID = P.PRODUCT_ID
INNER JOIN
ORDER_HEADER OH ON OH.ORDER_ID = OI.ORDER_ID
WHERE
PC.PRODUCT_CLASS_DESC IN ('Mobiles', 'Watches')
AND OH.ORDER_STATUS = 'Shipped'
GROUP BY
P.PRODUCT_DESC,
PC.PRODUCT_CLASS_DESC,
P.PRODUCT_QUANTITY_AVAIL;
Output 8(b):-
Table 8.2 (Query 8 (b))
C.REST OF THE CATEGORIES,
-- i.IF SALES TILL DATE IS ZERO THEN SHOW 'NO SALES IN
PAST, GIVE DISCOUNT TO REDUCE INVENTORY',
-- ii.IF INVENTORY QUANTITY IS LESS THAN 30% OF QUANTITY SOLD,
SHOW 'LOW INVENTORY, NEED TO ADD INVENTORY',
-- iii.IF INVENTORY QUANTITY IS LESS THAN 70% OF QUANTITY SOLD,
SHOW 'MEDIUM INVENTORY, NEED TO ADD SOME INVENTORY',
-- iv. IF INVENTORY QUANTITY IS MORE OR EQUAL TO 70% OF
QUANTITY SOLD, SHOW 'SUFFICIENT INVENTORY'
-- [NOTE: TABLES TO BE USED -PRODUCT, PRODUCT_CLASS,
ORDER_ITEMS] (USE SUB-QUERY)
Solution 8(c): -
select * from product_class
SELECT
P.PRODUCT_DESC,
PC.PRODUCT_CLASS_DESC,
P.PRODUCT_QUANTITY_AVAIL,
COUNT(OI.PRODUCT_QUANTITY) AS SOLD_QUANTITY,
(P.PRODUCT_QUANTITY_AVAIL / (P.PRODUCT_QUANTITY_AVAIL +
COUNT(OI.PRODUCT_QUANTITY))) * 100 AS AVAILABLE_QTY_PRC,
CASE
WHEN (P.PRODUCT_QUANTITY_AVAIL / (P.PRODUCT_QUANTITY_AVAIL +
COUNT(OI.PRODUCT_QUANTITY))) * 100 < 30 THEN 'Low inventory, need to add
inventory'
WHEN (P.PRODUCT_QUANTITY_AVAIL / (P.PRODUCT_QUANTITY_AVAIL +
COUNT(OI.PRODUCT_QUANTITY))) * 100 < 70 THEN 'Medium inventory, need to add
some inventory'
WHEN (P.PRODUCT_QUANTITY_AVAIL / (P.PRODUCT_QUANTITY_AVAIL +
COUNT(OI.PRODUCT_QUANTITY))) * 100 >= 70 THEN 'Sufficient inventory'
ELSE 'No sales in past, give discount to reduce inventory'
END AS INVENTORY_STATUS
FROM
PRODUCT_CLASS PC
INNER JOIN
PRODUCT P ON P.PRODUCT_CLASS_CODE = PC.PRODUCT_CLASS_CODE
INNER JOIN
ORDER_ITEMS OI ON OI.PRODUCT_ID = P.PRODUCT_ID
INNER JOIN
ORDER_HEADER OH ON OH.ORDER_ID = OI.ORDER_ID
WHERE
PC.PRODUCT_CLASS_DESC IN ('Toys', 'Clothes','Books','Furnitures','Bags','Kitchen
Items')
AND OH.ORDER_STATUS = 'Shipped'
GROUP BY
P.PRODUCT_DESC,
PC.PRODUCT_CLASS_DESC,
P.PRODUCT_QUANTITY_AVAIL;
Output 8(c):-
Table 8.3 (Query 8 (c))
9. WRITE A QUERY TO DISPLAY PRODUCT_ID, PRODUCT_DESC AND TOTAL
QUANTITY OF PRODUCTS WHICH ARE SOLD TOGETHER WITH PRODUCT ID 201
-- AND ARE NOT SHIPPED TO CITY BANGALORE AND NEW DELHI. DISPLAY THE
OUTPUT IN DESCENDING ORDER WITH RESPECT TO TOT_QTY.(USE SUB-
QUERY)
-- [NOTE: TABLES TO BE USED -
ORDER_ITEMS,PRODUCT,ORDER_HEADER, ONLINE_CUSTOMER, ADDRESS]
Solution 9: -
select P.PRODUCT_ID, P.PRODUCT_DESC,A.CITY,Count(OI.PRODUCT_QUANTITY)
as Total_Quantity from PRODUCT P
inner join ORDER_ITEMS OI on OI.PRODUCT_ID = P.PRODUCT_ID
inner join ORDER_HEADER OH on OH.ORDER_ID = OI.ORDER_ID
inner join ONLINE_CUSTOMER OC on OC.CUSTOMER_ID = OH.CUSTOMER_ID
inner join ADDRESS A on A.ADDRESS_ID= OC.ADDRESS_ID
where P.PRODUCT_ID = OI.PRODUCT_ID and P.PRODUCT_ID = 201 and A.CITY not
in ('Bangalore','New Delhi')
Group by P.PRODUCT_ID, P.PRODUCT_DESC,A.CITY;
Output 9:-
Table 9.1 (Query 9)
10. WRITE A QUERY TO DISPLAY THE ORDER_ID,CUSTOMER_ID AND
CUSTOMER FULLNAME AND TOTAL QUANTITY OF PRODUCTS SHIPPED FOR
ORDER IDS
-- WHICH ARE EVENAND SHIPPED TO ADDRESS WHERE PINCODE IS NOT
STARTING WITH "5"
-- [NOTE: TABLES TO BE USED -
ONLINE_CUSTOMER,ORDER_HEADER, ORDER_ITEMS, ADDRESS]

Solution 10: -
select OI.ORDER_ID, OC.CUSTOMER_ID, concat(OC.CUSTOMER_FNAME,'
',OC.CUSTOMER_LNAME) as FULL_NAME,
sum(OI.PRODUCT_QUANTITY) as TOTAL_QUANTITY from ORDER_ITEMS OI
inner join ORDER_HEADER OH using (ORDER_ID)
inner join ONLINE_CUSTOMER OC using (CUSTOMER_ID)
inner join ADDRESS A using (ADDRESS_ID)
where ORDER_ID%2=0 and pincode not like '5%'
group by ORDER_ID;
Output 10:-
Table 10.1 (Query 10)

You might also like