cswork / libraryOpen practice workspace

Coding questions · Amazon

Identify Top-Buying Customers Daily with SQL Query

This question evaluates a candidate's competency in SQL data manipulation, including aggregation over calendar dates, grouping by customer, and handling ties when determining top buyers.

PRIME

+-------------+------------+----------+
| Customer_ID | Start_Date | End_Date |
+-------------+------------+----------+
| 1           | 2025-01-01 | 2025-12-31|
| 2           | 2025-03-15 | 2025-10-15|
+-------------+------------+----------+

ORDERS

+-------------+----------+------------+-----------+--------------+
| Customer_ID | Order_ID | Order_Day  | Product_ID| Quantity_Sold|
+-------------+----------+------------+-----------+--------------+
| 1           | 1001     | 2025-04-01 | P123      | 3            |
| 1           | 1002     | 2025-04-01 | P456      | 2            |
| 2           | 1003     | 2025-04-01 | P123      | 6            |
+-------------+----------+------------+-----------+--------------+
Scenario

E-commerce platform wants to identify the top-buying customer(s) for every calendar day based on total quantity sold.

Question

Write an SQL query that, for each calendar day, returns the Customer_ID with the highest total Quantity_Sold and the corresponding total units. Return all customers in case of a tie.

Hint

Aggregate by day and customer, then use RANK() or DENSE_RANK() over daily totals to select rank = 1.

Top Customers Per Day

For each Order_Day, return the Customer_ID(s) with the highest total Quantity_Sold across all products and the corresponding total units. Return all customers in case of a tie.

Table ORDERS

columntypeconstraints
Customer_IDINTEGERNOT NULL
Order_IDINTEGERPRIMARY KEY, NOT NULL
Order_DayDATENOT NULL
Product_IDVARCHARNOT NULL
Quantity_SoldINTEGERNOT NULL

Sample data:

Customer_IDOrder_DayOrder_IDProduct_IDQuantity_Sold
12025-04-011001P1233
12025-04-011002P4562
22025-04-011003P1236

Expected output

One row per Order_Day per top-buying customer. If multiple customers tie for the highest total units on a day, return all tied customers for that day.

Customer_IDOrder_DayTotal_Quantity_Sold
22025-04-016

Hints

  1. Aggregate by Order_Day and Customer_ID first.
  2. Use DENSE_RANK over each day ordered by total quantity descending.

Top PRIME Customers Daily

For each Order_Day, among customers with an active PRIME membership on that date (Start_Date <= Order_Day <= End_Date), return the Customer_ID(s) with the highest total Quantity_Sold and their totals. Include ties.

Table PRIME

columntypeconstraints
Customer_IDINTEGERNOT NULL
Start_DateDATENOT NULL
End_DateDATENOT NULL

Sample data:

Customer_IDEnd_DateStart_Date
12025-12-312025-01-01
22025-10-152025-03-15

Table ORDERS

columntypeconstraints
Customer_IDINTEGERNOT NULL
Order_IDINTEGERPRIMARY KEY, NOT NULL
Order_DayDATENOT NULL
Product_IDVARCHARNOT NULL
Quantity_SoldINTEGERNOT NULL

Sample data:

Customer_IDOrder_DayOrder_IDProduct_IDQuantity_Sold
12025-04-011001P1233
12025-04-011002P4562
22025-04-011003P1236

Expected output

One row per Order_Day per top PRIME customer. If multiple PRIME customers tie for the highest total units on a day, return all tied PRIME customers for that day.

Customer_IDOrder_DayTotal_Quantity_Sold
22025-04-016

Hints

  1. Join ORDERS to PRIME and filter by the date range where the PRIME membership is active.
  2. Rank totals per day with DENSE_RANK to include ties.

Daily Totals Per Customer

For each Order_Day and Customer_ID, return the total Quantity_Sold across all products. Only include customers with orders on that day.

Table ORDERS

columntypeconstraints
Customer_IDINTEGERNOT NULL
Order_IDINTEGERPRIMARY KEY, NOT NULL
Order_DayDATENOT NULL
Product_IDVARCHARNOT NULL
Quantity_SoldINTEGERNOT NULL

Sample data:

Customer_IDOrder_DayOrder_IDProduct_IDQuantity_Sold
12025-04-011001P1233
12025-04-011002P4562
22025-04-011003P1236

Expected output

One row per day per customer with the sum of units sold that day.

Customer_IDOrder_DayTotal_Quantity_Sold
12025-04-015
22025-04-016

Hints

  1. Aggregate with GROUP BY on Order_Day and Customer_ID.