Top 2 Earning Drivers in Each City

For each city, find the two drivers with the highest total fares from completed trips. Break ties by driver_id (lower first), so exactly two drivers come back per city.

Expected output

city, driver_id, name, total_fares (rounded to 2 decimals), rnk (1 or 2). Sorted by city, rnk.

Row order is checked. Column names are not checked; numbers are compared to 2 decimals.

Dataset: Ride-share marketplace

Trip requests in four US cities from January to March 2026, with drivers, riders, fares and ratings.

drivers

One row per driver. A driver only serves their own city.

driver_idINTEGERprimary key
nameTEXT
cityTEXT
joined_dateTEXTYYYY-MM-DD
vehicle_typeTEXTstandard, comfort or xl
riders

One row per rider account.

rider_idINTEGERprimary key
nameTEXT
cityTEXT
signup_dateTEXTYYYY-MM-DD
trips

One row per trip request, whatever its outcome.

trip_idINTEGERprimary key, increases with requested_at
rider_idINTEGER
driver_idINTEGERNULL when no driver was assigned
cityTEXT
requested_atTEXTYYYY-MM-DD HH:MM:SS (UTC)
dropoff_atTEXTNULL unless completed
statusTEXTcompleted, cancelled_rider, cancelled_driver or no_driver
distance_kmREALestimated route distance
fareREALUSD, NULL unless completed
rider_ratingINTEGER1-5 stars given by the rider, NULL if not rated

Engine: SQLite. Dates are text (YYYY-MM-DD); use strftime(), date() and julianday() for date math.

Related problems

SQLite · runs in your browser
Ctrl/⌘ + Enter to run
Expected output preview (8 rows, order matters)
citydriver_idnametotal_faresrnk
Austin9Lucas Patel848.21
Austin5Felix Singh749.12
Denver26Emma Chen128.371

Showing 3 of 8 rows.

Hints

Worked solution

Run at least one query to unlock it.