QueriesSQL
QueriesSQL
Queries
-----------------------------------------------------------------------------------------------------------------------------------*/
-- 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:
-- ii.IF CUSTOMER CREATION DATE YEAR >=2005 AND <2011 THEN CATEGORY B
-- HINT: USE CASE STATEMENT, NO PERMANENT CHANGE IN TABLE REQUIRED. [NOTE: TABLES TO BE
USED -ONLINE_CUSTOMER TABLE]
FROM ONLINE_CUSTOMER
LIMIT 10;
SELECT
CUSTOMER_FNAME,
CUSTOMER_LNAME,
CUSTOMER_EMAIL,
CUSTOMER_CREATION_DATE,
CUSTOMER_GENDER
FROM
ONLINE_CUSTOMER
LIMIT 10;
SELECT
CUSTOMER_ID,
CUSTOMER_FNAME,
CUSTOMER_LNAME,
CUSTOMER_EMAIL,
CUSTOMER_CREATION_DATE,
CUSTOMER_GENDER,
CONCAT(
CASE
ELSE ''
END,
UPPER(CUSTOMER_FNAME),
' ',
UPPER(CUSTOMER_LNAME)
) AS CUSTOMER_FULL_NAME,
CASE
WHEN YEAR(CUSTOMER_CREATION_DATE) < 2005 THEN 'Category A'
ELSE ''
END AS CUSTOMER_CATEGORY
FROM
ONLINE_CUSTOMER
LIMIT 10;
-- 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.
-- HINT: USE CASE STATEMENT, NO PERMANENT CHANGE IN TABLE REQUIRED. [NOTE: TABLES TO BE
USED -PRODUCT, ORDER_ITEMS TABLE]
SOLUTION-
SELECT
p.PRODUCT_ID,
p.PRODUCT_DESC,
p.PRODUCT_QUANTITY_AVAIL,
p.PRODUCT_PRICE,
CASE
END AS NEW_PRICE
FROM
PRODUCT p
LEFT JOIN
WHERE
oi.PRODUCT_ID IS NULL
ORDER BY
INVENTORY_VALUE DESC;
-- 3. WRITE A QUERY TO DISPLAY PRODUCT_CLASS_CODE, PRODUCT_CLASS_DESCRIPTION, COUNT OF
PRODUCT TYPE IN EACH PRODUCT CLASS,
-- WHICH HAVE MORE THAN 1,00,000 INVENTORY VALUE. SORT THE OUTPUT WITH RESPECT TO
DECREASING VALUE OF INVENTORY_VALUE.
SOLUTION –
SELECT
pc.PRODUCT_CLASS_CODE,
pc.PRODUCT_CLASS_DESC,
COUNT(p.PRODUCT_ID) AS PRODUCT_TYPE_COUNT,
FROM
PRODUCT_CLASS pc
JOIN
GROUP BY
pc.PRODUCT_CLASS_CODE,
pc.PRODUCT_CLASS_DESC
HAVING
ORDER BY
INVENTORY_VALUE DESC;
-- 4. WRITE A QUERY TO DISPLAY CUSTOMER_ID, FULL NAME, CUSTOMER_EMAIL, CUSTOMER_PHONE
AND COUNTRY OF CUSTOMERS WHO HAVE CANCELLED
SOLUTION-
SELECT
oc.CUSTOMER_ID,
oc.CUSTOMER_EMAIL,
oc.CUSTOMER_PHONE,
a.COUNTRY
FROM
ONLINE_CUSTOMER oc
JOIN
WHERE
oc.CUSTOMER_ID IN (
SELECT
oh.CUSTOMER_ID
FROM
ORDER_HEADER oh
WHERE
oh.ORDER_STATUS = 'Cancelled'
GROUP BY
oh.CUSTOMER_ID
HAVIN0047
LIMIT 0, 50000;
SOLUTION-
SELECT
s.SHIPPER_NAME,
a.CITY,
COUNT(oh.ORDER_ID) AS NUMBER_OF_CONSIGNMENTS
FROM
SHIPPER s
JOIN
JOIN
JOIN
WHERE
s.SHIPPER_NAME = 'DHL'
GROUP BY
s.SHIPPER_NAME,
a.CITY
ORDER BY
NUMBER_OF_CONSIGNMENTS DESC
LIMIT 9;
-- 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'
SOLUTION-
SELECT
oc.CUSTOMER_ID,
SUM(oi.PRODUCT_QUANTITY) AS TOTAL_QUANTITY_SHIPPED,
FROM
ONLINE_CUSTOMER oc
JOIN
JOIN
JOIN
WHERE
oh.PAYMENT_MODE = 'CASH'
GROUP BY
oc.CUSTOMER_ID,
oc.CUSTOMER_FNAME,
oc.CUSTOMER_LNAME
ORDER BY
oc.CUSTOMER_ID;
-- 7. WRITE A QUERY TO DISPLAY ORDER_ID AND VOLUME OF BIGGEST ORDER (IN TERMS OF VOLUME)
THAT CAN FIT IN CARTON ID 10
SOLUTION-
-- 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'
SOLUTION -A
#solution A
SELECT
p.PRODUCT_ID,
p.PRODUCT_DESC,
p.PRODUCT_QUANTITY_AVAIL,
COALESCE(SUM(oi.PRODUCT_QUANTITY), 0) AS QUANTITY_SOLD,
CASE
END AS INVENTORY_STATUS
FROM
product p
LEFT JOIN
order_items oi ON p.PRODUCT_ID = oi.PRODUCT_ID
JOIN
WHERE
GROUP BY
p.PRODUCT_ID,
p.PRODUCT_DESC,
p.PRODUCT_QUANTITY_AVAIL
LIMIT 0, 50000;
-- 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- B
SELECT
p.PRODUCT_ID,
p.PRODUCT_DESC,
p.PRODUCT_QUANTITY_AVAIL,
COALESCE(SUM(oi.PRODUCT_QUANTITY), 0) AS QUANTITY_SOLD,
CASE
CASE
END
CASE
END
END AS INVENTORY_STATUS
FROM
product p
LEFT JOIN
JOIN
WHERE
GROUP BY
p.PRODUCT_ID,
p.PRODUCT_DESC,
p.PRODUCT_QUANTITY_AVAIL,
pc.PRODUCT_CLASS_CODE
LIMIT 0, 50000;
-- 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'
SOLUTION –C
SELECT
p.PRODUCT_ID,
p.PRODUCT_DESC,
p.PRODUCT_QUANTITY_AVAIL,
COALESCE(sales_data.QUANTITY_SOLD, 0) AS QUANTITY_SOLD,
CASE
CASE
END
END
ELSE
CASE
END
END AS INVENTORY_STATUS
FROM
product p
JOIN
LEFT JOIN
SELECT
oi.PRODUCT_ID,
SUM(oi.PRODUCT_QUANTITY) AS QUANTITY_SOLD
FROM
order_items oi
GROUP BY
oi.PRODUCT_ID
) AS sales_data
ON
p.PRODUCT_ID = sales_data.PRODUCT_ID
GROUP BY
p.PRODUCT_ID,
p.PRODUCT_DESC,
p.PRODUCT_QUANTITY_AVAIL,
pc.PRODUCT_CLASS_CODE,
sales_data.QUANTITY_SOLD
LIMIT 0, 50000;
-- AND ARE NOT SHIPPED TO CITY BANGALORE AND NEW DELHI. DISPLAY THE OUTPUT IN DESCENDING
ORDER WITH RESPECT TO TOT_QTY.(USE SUB-QUERY)
SELECT
p.PRODUCT_ID,
p.PRODUCT_DESC,
SUM(oi.PRODUCT_QUANTITY) AS TOT_QTY
FROM
order_items oi
JOIN
JOIN
JOIN
JOIN
WHERE
oi.ORDER_ID IN (
SELECT
oi_inner.ORDER_ID
FROM
order_items oi_inner
WHERE
oi_inner.PRODUCT_ID = 201
)
AND a.CITY NOT IN ('Bangalore', 'New Delhi')
GROUP BY
p.PRODUCT_ID, p.PRODUCT_DESC
ORDER BY
TOT_QTY DESC;
-- 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"
SOLUTION -10
SHOW TABLES;
SELECT
oh.ORDER_ID,
oh.CUSTOMER_ID,
SUM(oi.PRODUCT_QUANTITY) AS TOTAL_QUANTITY_SHIPPED
FROM
ORDER_HEADER oh
JOIN
JOIN
JOIN
WHERE
AND LEFT(a.PINCODE, 1) <> '5' -- PINCODE does not start with '5'
GROUP BY
ORDER BY
oh.ORDER_ID
LIMIT 50000;