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

Advanced_SQL_Assignment_with_Answers

Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
7 views

Advanced_SQL_Assignment_with_Answers

Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 5

Advanced SQL Assignment with Answers

Scenario

You are hired as a data analyst for a company that manages customers, their orders, shipments,

and employee relationships. Your task is to use SQL to extract insights, optimize queries, and

analyze

hierarchical relationships using the following tables.

Dataset Definitions and Sample Data

1. Customers

| customer_id | first_name | last_name | age | country |

|-------------|------------|------------|-----|---------|

|1 | John | Doe | 31 | USA |

|2 | Robert | Luna | 22 | USA |

|3 | David | Robinson | 22 | UK |

|4 | John | Reinhardt | 25 | UK |

|5 | Betty | Doe | 28 | UAE |

2. Orders

| order_id | item | amount | customer_id |

|----------|------------|---------|-------------|

|1 | Keyboard | 400.00 | 4 |

|2 | Mouse | 300.00 | 4 |

|3 | Monitor | 12000.00 | 3 |

|4 | Keyboard | 400.00 | 1 |
|5 | Mousepad | 250.00 | 2 |

3. Shippings

| shipping_id | status | customer |

|-------------|------------|----------|

|1 | Pending |2 |

|2 | Pending |4 |

|3 | Delivered | 3 |

|4 | Pending |5 |

|5 | Delivered | 1 |

Assignment with Answers

1. Data Retrieval Using Joins

a. Query: List all customers and their corresponding order details. Include customers who haven't

placed any orders.

Answer:

SELECT c.customer_id, c.first_name, c.last_name, o.item, o.amount

FROM Customers c

LEFT JOIN Orders o

ON c.customer_id = o.customer_id;

b. Query: Create a report showing all employees and their respective managers. Include employees

who don't have a manager.

Answer:

SELECT e1.name AS employee, e2.name AS manager

FROM Employees e1
LEFT JOIN Employees e2

ON e1.manager_id = e2.employee_id;

2. Combining Queries

a. Query: Combine the results of customers who have either placed orders or have shipments,

avoiding duplicate entries.

Answer:

SELECT customer_id, first_name, last_name

FROM Customers

WHERE customer_id IN (

SELECT customer_id FROM Orders

UNION

SELECT customer FROM Shippings

);

3. Query Optimization

a. Query: Write an optimized query to find the total amount of orders placed by each customer.

Answer:

SELECT c.first_name, c.last_name, SUM(o.amount) AS total_amount

FROM Customers c

JOIN Orders o

ON c.customer_id = o.customer_id

GROUP BY c.customer_id, c.first_name, c.last_name;

4. Working with Hierarchical Data

a. Query: Create a hierarchy of employees, showing their name, position, and their manager's

name.
Answer:

WITH EmployeeHierarchy AS (

SELECT e1.name AS employee, e1.position, e2.name AS manager

FROM Employees e1

LEFT JOIN Employees e2

ON e1.manager_id = e2.employee_id

SELECT * FROM EmployeeHierarchy;

5. Full Outer Join and Exclusions

a. Query: Simulate a FULL OUTER JOIN between Customers and Orders.

Answer:

SELECT c.customer_id, c.first_name, c.last_name, o.item, o.amount

FROM Customers c

LEFT JOIN Orders o

ON c.customer_id = o.customer_id

UNION

SELECT c.customer_id, c.first_name, c.last_name, o.item, o.amount

FROM Orders o

LEFT JOIN Customers c

ON c.customer_id = o.customer_id;

6. Advanced Challenge

a. Query: Generate a customer report.

Answer:

SELECT c.first_name, c.last_name,

SUM(o.amount) AS total_order_amount,
COALESCE(s.status, 'No Shipments') AS shipment_status,

CASE

WHEN SUM(o.amount) > 10000 THEN 'High-Value Customer'

ELSE 'Regular Customer'

END AS customer_type

FROM Customers c

LEFT JOIN Orders o

ON c.customer_id = o.customer_id

LEFT JOIN Shippings s

ON c.customer_id = s.customer

GROUP BY c.customer_id, c.first_name, c.last_name, s.status;

You might also like