First SELECT Statement:
sql
SELECT c.EmailAddress, oi.OrderID, SUM(oi.Price * oi.Quantity) AS OrderTotal
FROM Customers c
JOIN Orders o ON c.CustomerID = o.CustomerID
JOIN OrderItems oi ON o.OrderID = oi.OrderID
GROUP BY c.EmailAddress, oi.OrderID;
This statement first joins the `Customers`, `Orders`, and `OrderItems` tables on their respective foreign key relationships. Then, it calculates the order total by multiplying the price and quantity for each item within an order and summing those values using the `SUM` aggregate function.
Second SELECT Statement:
sql
SELECT EmailAddress, MAX(OrderTotal) AS LargestOrder
FROM (
SELECT c.EmailAddress, oi.OrderID, SUM(oi.Price * oi.Quantity) AS OrderTotal
FROM Customers c
JOIN Orders o ON c.CustomerID = o.CustomerID
JOIN OrderItems oi ON o.OrderID = oi.OrderID
GROUP BY c.EmailAddress, oi.OrderID
) AS subquery
GROUP BY EmailAddress;
This statement uses the first SELECT statement as a subquery within its FROM clause. This allows us to pre-calculate the order total for each customer and order combination.