All problems

The Loyal Customers

mediumSQLJoinsGroupBy

The loyalty team at UrbanHop is choosing who gets an invitation to the beta of a subscription product, and the shortlist is ordered by how much each rider has actually spent with the platform. A booking a rider cancelled cost them nothing, so it says nothing about their value and must not count towards the figure.

The list is read by a human, so it needs names rather than rider numbers, and money to two decimal places. A rider who has never completed a booking has spent nothing and is not on the list.

rides — one row per booking. rider_id points at a row in riders and driver_id at a row in drivers. distance_km is the trip length in kilometres and fare the price in dollars; both are recorded when the booking is made, so a booking that never happened still carries them. status is either completed or cancelled. ride_date is the day the ride was booked for.

id rider_id driver_id distance_km fare ride_date status
1 1 1 5.2 12.5 2023-06-01 completed
2 1 4 3.0 8.0 2023-06-03 completed
3 2 2 10.0 22.0 2023-06-02 completed
4 3 1 2.1 6.5 2023-06-05 cancelled
5 3 4 4.4 11.0 2023-06-06 completed
6 4 3 7.8 18.0 2023-06-04 completed
7 5 2 1.5 5.0 2023-06-07 cancelled
8 2 2 12.3 26.5 2023-06-10 completed
9 1 1 6.6 15.0 2023-06-12 completed
10 4 3 3.3 9.0 2023-06-15 completed
11 5 2 8.8 19.5 2023-06-18 completed
12 3 4 2.9 7.5 2023-06-20 cancelled

riders — one row per registered passenger. city is the city they signed up in and signup_date the day they joined.

id name city signup_date
1 Maya Chen Austin 2023-01-05
2 Noah Patel Denver 2023-02-14
3 Zara Ahmed Austin 2023-03-01
4 Leo Kim Seattle 2023-04-20
5 Ivy Brooks Denver 2023-05-11

Both tables already exist in the database — there is nothing to create or load.

Task: Write a query that returns one row per rider with at least one completed booking, with their name and their total spend on completed bookings, rounded to two decimal places, as total_spend. Highest spend first; riders on the same figure are separated alphabetically by name.

Example output

Shape only — these riders and figures are invented:

name total_spend
Elena Ford 152.75
Hugo Marsh 98
Cleo Barnes 61.5
Wren Adler 40.25
Ola Diaz 12

Sign in to solve this problem

Reading problems is free for everyone — solving them (Run, Submit, and tracking what you've solved) needs an account.

Sign in

Discussion

Sign in to join the discussion — reading is open to everyone.

Loading comments…