0% found this document useful (0 votes)
4 views

QueriesSQL

Uploaded by

amansinhmar2303
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)
4 views

QueriesSQL

Uploaded by

amansinhmar2303
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/ 21

-----------------------------------------------------------------------------------------------------------------------------------

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:

-- 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 - ALTER TABLE ONLINE_CUSTOMER

ADD COLUMN CUSTOMER_FNAME VARCHAR(20),

ADD COLUMN CUSTOMER_LNAME VARCHAR(20),

ADD COLUMN CUSTOMER_EMAIL VARCHAR(30),

ADD COLUMN CUSTOMER_PHONE BIGINT,

ADD COLUMN ADDRESS_ID INT,

ADD COLUMN CUSTOMER_CREATION_DATE DATE,

ADD COLUMN CUSTOMER_USERNAME VARCHAR(20),


ADD COLUMN CUSTOMER_GENDER CHAR(1)

SHOW COLUMNS FROM ONLINE_CUSTOMER;

SELECT CUSTOMER_ID, CUSTOMER_FNAME, CUSTOMER_LNAME, CUSTOMER_EMAIL,


CUSTOMER_CREATION_DATE, CUSTOMER_GENDER

FROM ONLINE_CUSTOMER

LIMIT 10;

-- Check the structure of the ONLINE_CUSTOMER table

SHOW COLUMNS FROM ONLINE_CUSTOMER;

-- Check if there is any data in the table

SELECT * FROM ONLINE_CUSTOMER LIMIT 10;

SELECT COUNT(*) AS total_records FROM ONLINE_CUSTOMER;

SELECT COUNT(*) AS non_null_fname FROM ONLINE_CUSTOMER WHERE CUSTOMER_FNAME IS NOT


NULL;

SELECT COUNT(*) AS non_null_lname FROM ONLINE_CUSTOMER WHERE CUSTOMER_LNAME IS NOT


NULL;

SELECT COUNT(*) AS non_null_email FROM ONLINE_CUSTOMER WHERE CUSTOMER_EMAIL IS NOT


NULL;

SELECT COUNT(*) AS non_null_creation_date FROM ONLINE_CUSTOMER WHERE


CUSTOMER_CREATION_DATE IS NOT NULL;

SELECT COUNT(*) AS non_null_gender FROM ONLINE_CUSTOMER WHERE CUSTOMER_GENDER IS NOT


NULL;

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

WHEN CUSTOMER_GENDER = 'M' THEN 'Mr. '

WHEN CUSTOMER_GENDER = 'F' THEN 'Ms. '

ELSE ''

END,

UPPER(CUSTOMER_FNAME),

' ',

UPPER(CUSTOMER_LNAME)

) AS CUSTOMER_FULL_NAME,

CASE
WHEN YEAR(CUSTOMER_CREATION_DATE) < 2005 THEN 'Category A'

WHEN YEAR(CUSTOMER_CREATION_DATE) >= 2005 AND YEAR(CUSTOMER_CREATION_DATE) <


2011 THEN 'Category B'

WHEN YEAR(CUSTOMER_CREATION_DATE) >= 2011 THEN 'Category C'

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.

-- 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-

SELECT

p.PRODUCT_ID,

p.PRODUCT_DESC,

p.PRODUCT_QUANTITY_AVAIL,

p.PRODUCT_PRICE,

p.PRODUCT_QUANTITY_AVAIL * p.PRODUCT_PRICE AS INVENTORY_VALUE,

CASE

WHEN p.PRODUCT_PRICE > 20000 THEN p.PRODUCT_PRICE * 0.8 -- 20% discount

WHEN p.PRODUCT_PRICE > 10000 THEN p.PRODUCT_PRICE * 0.85 -- 15% discount

ELSE p.PRODUCT_PRICE * 0.9 -- 10% discount

END AS NEW_PRICE

FROM

PRODUCT p

LEFT JOIN

ORDER_ITEMS oi ON p.PRODUCT_ID = oi.PRODUCT_ID

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,

-- 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 –

SELECT

pc.PRODUCT_CLASS_CODE,

pc.PRODUCT_CLASS_DESC,

COUNT(p.PRODUCT_ID) AS PRODUCT_TYPE_COUNT,

SUM(p.PRODUCT_QUANTITY_AVAIL * p.PRODUCT_PRICE) AS INVENTORY_VALUE

FROM

PRODUCT_CLASS pc

JOIN

PRODUCT p ON pc.PRODUCT_CLASS_CODE = p.PRODUCT_CLASS_CODE

GROUP BY

pc.PRODUCT_CLASS_CODE,

pc.PRODUCT_CLASS_DESC

HAVING

INVENTORY_VALUE > 100000

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

-- ALL THE ORDERS PLACED BY THEM(USE SUB-QUERY)

-- [NOTE: TABLES TO BE USED - ONLINE_CUSTOMER, ADDRESSS, ORDER_HEADER]

SOLUTION-

SELECT

oc.CUSTOMER_ID,

CONCAT(UPPER(oc.CUSTOMER_FNAME), ' ', UPPER(oc.CUSTOMER_LNAME)) AS FULL_NAME,

oc.CUSTOMER_EMAIL,

oc.CUSTOMER_PHONE,

a.COUNTRY

FROM

ONLINE_CUSTOMER oc

JOIN

ADDRESS a ON oc.ADDRESS_ID = a.ADDRESS_ID

WHERE

oc.CUSTOMER_ID IN (

SELECT

oh.CUSTOMER_ID
FROM

ORDER_HEADER oh

WHERE

oh.ORDER_STATUS = 'Cancelled'

GROUP BY

oh.CUSTOMER_ID

HAVIN0047

COUNT(*) = SUM(CASE WHEN oh.ORDER_STATUS = 'Cancelled' THEN 1 ELSE 0 END)

LIMIT 0, 50000;

-- 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-

SELECT

s.SHIPPER_NAME,

a.CITY,

COUNT(DISTINCT oc.CUSTOMER_ID) AS NUMBER_OF_CUSTOMERS,

COUNT(oh.ORDER_ID) AS NUMBER_OF_CONSIGNMENTS
FROM

SHIPPER s

JOIN

ORDER_HEADER oh ON s.SHIPPER_ID = oh.SHIPPER_ID

JOIN

ONLINE_CUSTOMER oc ON oh.CUSTOMER_ID = oc.CUSTOMER_ID

JOIN

ADDRESS a ON oc.ADDRESS_ID = a.ADDRESS_ID

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'

-- [NOTE: TABLES TO BE USED -ONLINE_CUSTOMER, ORDER_ITEMS, PRODUCT, ORDER_HEADER]

SOLUTION-

SELECT

oc.CUSTOMER_ID,

CONCAT(UPPER(oc.CUSTOMER_FNAME), ' ', UPPER(oc.CUSTOMER_LNAME)) AS


CUSTOMER_FULL_NAME,

SUM(oi.PRODUCT_QUANTITY) AS TOTAL_QUANTITY_SHIPPED,

SUM(oi.PRODUCT_QUANTITY * p.PRODUCT_PRICE) AS TOTAL_VALUE_SHIPPED

FROM

ONLINE_CUSTOMER oc

JOIN

ORDER_HEADER oh ON oc.CUSTOMER_ID = oh.CUSTOMER_ID

JOIN

ORDER_ITEMS oi ON oh.ORDER_ID = oi.ORDER_ID

JOIN

PRODUCT p ON oi.PRODUCT_ID = p.PRODUCT_ID

WHERE

oh.PAYMENT_MODE = 'CASH'

AND oc.CUSTOMER_LNAME LIKE 'G%'

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

-- [NOTE: TABLES TO BE USED -CARTON, ORDER_ITEMS, PRODUCT]

SOLUTION-

SELECT * FROM ORDER_ITEMS; --

Example 2: Summarize total quantities ordered per product SELECT PRODUCT_ID,


SUM(PRODUCT_QUANTITY) AS TOTAL_QUANTITY_ORDERED FROM ORDER_ITEMS GROUP BY
PRODUCT_ID;

-- Example 3: Joining with other tables SELECT oi.ORDER_ID, oi.PRODUCT_ID, p.PRODUCT_DESC,


oi.PRODUCT_QUANTITY FROM ORDER_ITEMS oi JOIN PRODUCT p ON oi.PRODUCT_ID = p.PRODUCT_ID
WHERE oi.ORDER_ID = 1001;

-- 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'

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

WHEN COALESCE(SUM(oi.PRODUCT_QUANTITY), 0) = 0 THEN 'NO SALES IN PAST, GIVE DISCOUNT


TO REDUCE INVENTORY'

WHEN p.PRODUCT_QUANTITY_AVAIL < 0.1 * COALESCE(SUM(oi.PRODUCT_QUANTITY), 0) THEN


'LOW INVENTORY, NEED TO ADD INVENTORY'

WHEN p.PRODUCT_QUANTITY_AVAIL < 0.5 * COALESCE(SUM(oi.PRODUCT_QUANTITY), 0) THEN


'MEDIUM INVENTORY, NEED TO ADD SOME INVENTORY'

ELSE 'SUFFICIENT INVENTORY'

END AS INVENTORY_STATUS

FROM

product p

LEFT JOIN
order_items oi ON p.PRODUCT_ID = oi.PRODUCT_ID

JOIN

product_class pc ON p.PRODUCT_CLASS_CODE = pc.PRODUCT_CLASS_CODE

WHERE

pc.PRODUCT_CLASS_CODE IN (2050, 2053)

GROUP BY

p.PRODUCT_ID,

p.PRODUCT_DESC,

p.PRODUCT_QUANTITY_AVAIL

LIMIT 0, 50000;

-- 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- B

SELECT
p.PRODUCT_ID,

p.PRODUCT_DESC,

p.PRODUCT_QUANTITY_AVAIL,

COALESCE(SUM(oi.PRODUCT_QUANTITY), 0) AS QUANTITY_SOLD,

CASE

-- Electronics and Computer categories

WHEN pc.PRODUCT_CLASS_CODE IN (2050, 2053) THEN

CASE

WHEN COALESCE(SUM(oi.PRODUCT_QUANTITY), 0) = 0 THEN 'NO SALES IN PAST, GIVE


DISCOUNT TO REDUCE INVENTORY'

WHEN p.PRODUCT_QUANTITY_AVAIL < 0.1 * COALESCE(SUM(oi.PRODUCT_QUANTITY), 0)


THEN 'LOW INVENTORY, NEED TO ADD INVENTORY'

WHEN p.PRODUCT_QUANTITY_AVAIL < 0.5 * COALESCE(SUM(oi.PRODUCT_QUANTITY), 0)


THEN 'MEDIUM INVENTORY, NEED TO ADD SOME INVENTORY'

ELSE 'SUFFICIENT INVENTORY'

END

-- Mobiles and Watches categories

WHEN pc.PRODUCT_CLASS_CODE IN (2055, 2057) THEN

CASE

WHEN COALESCE(SUM(oi.PRODUCT_QUANTITY), 0) = 0 THEN 'NO SALES IN PAST, GIVE


DISCOUNT TO REDUCE INVENTORY'

WHEN p.PRODUCT_QUANTITY_AVAIL < 0.2 * COALESCE(SUM(oi.PRODUCT_QUANTITY), 0)


THEN 'LOW INVENTORY, NEED TO ADD INVENTORY'

WHEN p.PRODUCT_QUANTITY_AVAIL < 0.6 * COALESCE(SUM(oi.PRODUCT_QUANTITY), 0)


THEN 'MEDIUM INVENTORY, NEED TO ADD SOME INVENTORY'

ELSE 'SUFFICIENT INVENTORY'

END

END AS INVENTORY_STATUS
FROM

product p

LEFT JOIN

order_items oi ON p.PRODUCT_ID = oi.PRODUCT_ID

JOIN

product_class pc ON p.PRODUCT_CLASS_CODE = pc.PRODUCT_CLASS_CODE

WHERE

pc.PRODUCT_CLASS_CODE IN (2050, 2053, 2055, 2057)

GROUP BY

p.PRODUCT_ID,

p.PRODUCT_DESC,

p.PRODUCT_QUANTITY_AVAIL,

pc.PRODUCT_CLASS_CODE

LIMIT 0, 50000;

-- 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 –C

SELECT

p.PRODUCT_ID,

p.PRODUCT_DESC,

p.PRODUCT_QUANTITY_AVAIL,

COALESCE(sales_data.QUANTITY_SOLD, 0) AS QUANTITY_SOLD,

CASE

-- Electronics and Computer categories

WHEN pc.PRODUCT_CLASS_CODE IN (2050, 2053) THEN

CASE

WHEN COALESCE(sales_data.QUANTITY_SOLD, 0) = 0 THEN 'NO SALES IN PAST, GIVE DISCOUNT


TO REDUCE INVENTORY'

WHEN p.PRODUCT_QUANTITY_AVAIL < 0.1 * COALESCE(sales_data.QUANTITY_SOLD, 0) THEN


'LOW INVENTORY, NEED TO ADD INVENTORY'

WHEN p.PRODUCT_QUANTITY_AVAIL < 0.5 * COALESCE(sales_data.QUANTITY_SOLD, 0) THEN


'MEDIUM INVENTORY, NEED TO ADD SOME INVENTORY'

ELSE 'SUFFICIENT INVENTORY'

END

-- Mobiles and Watches categories

WHEN pc.PRODUCT_CLASS_CODE IN (2055, 2057) THEN


CASE

WHEN COALESCE(sales_data.QUANTITY_SOLD, 0) = 0 THEN 'NO SALES IN PAST, GIVE DISCOUNT


TO REDUCE INVENTORY'

WHEN p.PRODUCT_QUANTITY_AVAIL < 0.2 * COALESCE(sales_data.QUANTITY_SOLD, 0) THEN


'LOW INVENTORY, NEED TO ADD INVENTORY'

WHEN p.PRODUCT_QUANTITY_AVAIL < 0.6 * COALESCE(sales_data.QUANTITY_SOLD, 0) THEN


'MEDIUM INVENTORY, NEED TO ADD SOME INVENTORY'

ELSE 'SUFFICIENT INVENTORY'

END

-- Rest of the categories

ELSE

CASE

WHEN COALESCE(sales_data.QUANTITY_SOLD, 0) = 0 THEN 'NO SALES IN PAST, GIVE DISCOUNT


TO REDUCE INVENTORY'

WHEN p.PRODUCT_QUANTITY_AVAIL < 0.3 * COALESCE(sales_data.QUANTITY_SOLD, 0) THEN


'LOW INVENTORY, NEED TO ADD INVENTORY'

WHEN p.PRODUCT_QUANTITY_AVAIL < 0.7 * COALESCE(sales_data.QUANTITY_SOLD, 0) THEN


'MEDIUM INVENTORY, NEED TO ADD SOME INVENTORY'

ELSE 'SUFFICIENT INVENTORY'

END

END AS INVENTORY_STATUS

FROM

product p

JOIN

product_class pc ON p.PRODUCT_CLASS_CODE = pc.PRODUCT_CLASS_CODE

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;

-- 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,

SUM(oi.PRODUCT_QUANTITY) AS TOT_QTY

FROM

order_items oi

JOIN

product p ON oi.PRODUCT_ID = p.PRODUCT_ID

JOIN

order_header oh ON oi.ORDER_ID = oh.ORDER_ID

JOIN

online_customer oc ON oh.CUSTOMER_ID = oc.CUSTOMER_ID

JOIN

address a ON oc.ADDRESS_ID = a.ADDRESS_ID -- Assuming ADDRESS_ID is in online_customer table

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"

-- [NOTE: TABLES TO BE USED - ONLINE_CUSTOMER,ORDER_HEADER, ORDER_ITEMS, ADDRESS]

SOLUTION -10

SHOW COLUMNS FROM ORDER_HEADER;

SHOW COLUMNS FROM ADDRESS;

SHOW COLUMNS FROM ONLINE_CUSTOMER;

SHOW COLUMNS FROM ORDER_ITEMS;

SHOW TABLES;

SELECT

oh.ORDER_ID,
oh.CUSTOMER_ID,

CONCAT(oc.CUSTOMER_FNAME, ' ', oc.CUSTOMER_LNAME) AS CUSTOMER_FULLNAME,

SUM(oi.PRODUCT_QUANTITY) AS TOTAL_QUANTITY_SHIPPED

FROM

ORDER_HEADER oh

JOIN

ONLINE_CUSTOMER oc ON oh.CUSTOMER_ID = oc.CUSTOMER_ID

JOIN

ORDER_ITEMS oi ON oh.ORDER_ID = oi.ORDER_ID

JOIN

ADDRESS a ON oc.ADDRESS_ID = a.ADDRESS_ID -- Adjust join condition based on your schema

WHERE

oh.ORDER_ID % 2 = 0 -- Check if ORDER_ID is even

AND LEFT(a.PINCODE, 1) <> '5' -- PINCODE does not start with '5'

GROUP BY

oh.ORDER_ID, oh.CUSTOMER_ID, oc.CUSTOMER_FNAME, oc.CUSTOMER_LNAME

ORDER BY

oh.ORDER_ID

LIMIT 50000;

You might also like