cswork / libraryOpen practice workspace

Coding questions · OneMain Financial

Count, Return, Find, and Select in SQL Queries

This question evaluates proficiency in SQL data manipulation, specifically aggregation, grouping, filtering, and identification of extrema within a single-table orders dataset.

orders

+----------+--------------+------------+--------+
| order_id | customer_id  | order_date | amount |
+----------+--------------+------------+--------+
| 1        | 101          | 2024-01-05 | 250.00 |
| 2        | 102          | 2024-01-07 | 125.50 |
| 3        | 101          | 2024-01-10 | 80.00  |
| 4        | 103          | 2024-01-11 | 300.00 |
| 5        | 104          | 2024-01-15 | 150.00 |
+----------+--------------+------------+--------+
Scenario

SQL screening – answer four basic queries on a single orders table

Question

Count how many orders each customer has made. Return the total revenue generated per day. Find the customer(s) with the highest single order amount. Select all orders whose amount is above the overall average.

Hints

GROUP BY, ORDER BY, HAVING and window functions might help.

Orders per customer count

For each customer, count how many orders they have placed.

Table orders

columntypeconstraints
order_idINTEGERPRIMARY KEY, NOT NULL
customer_idINTEGERNOT NULL
order_dateDATENOT NULL
amountDECIMAL(10,2)NOT NULL

Sample data:

amountcustomer_idorder_dateorder_id
2501012024-01-051
125.51022024-01-072
801012024-01-103
3001032024-01-114
1501042024-01-155

Expected output

Each customer with the number of orders they placed.

customer_idorder_count
1012
1021
1031
1041

Hints

  1. Group rows by customer_id.
  2. Use COUNT(*) to count orders.

Daily total revenue

Calculate the total revenue generated for each order_date.

Table orders

columntypeconstraints
order_idINTEGERPRIMARY KEY, NOT NULL
customer_idINTEGERNOT NULL
order_dateDATENOT NULL
amountDECIMAL(10,2)NOT NULL

Sample data:

amountcustomer_idorder_dateorder_id
2501012024-01-051
125.51022024-01-072
801012024-01-103
3001032024-01-114
1501042024-01-155

Expected output

Total revenue per day, one row per order_date.

order_datetotal_revenue
2024-01-05250
2024-01-07125.5
2024-01-1080
2024-01-11300
2024-01-15150

Hints

  1. Aggregate with SUM(amount).
  2. Group by order_date.

Highest single order amount

Find the order(s) with the highest single order amount and return order_id, customer_id, and amount.

Table orders

columntypeconstraints
order_idINTEGERPRIMARY KEY, NOT NULL
customer_idINTEGERNOT NULL
order_dateDATENOT NULL
amountDECIMAL(10,2)NOT NULL

Sample data:

amountcustomer_idorder_dateorder_id
2501012024-01-051
125.51022024-01-072
801012024-01-103
3001032024-01-114
1501042024-01-155

Expected output

The order(s) tied for the maximum single order amount.

amountcustomer_idorder_id
3001034

Hints

  1. Find MAX(amount) first.
  2. Filter orders where amount equals that maximum.

Orders above average amount

Select all orders whose amount is greater than the overall average order amount.

Table orders

columntypeconstraints
order_idINTEGERPRIMARY KEY, NOT NULL
customer_idINTEGERNOT NULL
order_dateDATENOT NULL
amountDECIMAL(10,2)NOT NULL

Sample data:

amountcustomer_idorder_dateorder_id
2501012024-01-051
125.51022024-01-072
801012024-01-103
3001032024-01-114
1501042024-01-155

Expected output

All orders with amount greater than the overall average amount.

amountcustomer_idorder_dateorder_id
2501012024-01-051
3001032024-01-114

Hints

  1. Compute the overall AVG(amount) in a subquery.
  2. Filter orders with amount greater than that average.