0% found this document useful (0 votes)
4 views21 pages

QueriesSQL

Uploaded by

amansinhmar2303
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
Download as pdf or txt
0% found this document useful (0 votes)
4 views21 pages

QueriesSQL

Uploaded by

amansinhmar2303
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
Download as pdf or txt
Download as pdf or txt
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