Skip to main content
Back to problems
#2837
Easy Database

Total traveled distance

Database
76.6% acceptance
Mar 31, 2026
18
4

No description available.

Solution

Pandas
Time O(1)
Space O(1)
LeetCode
solution.pandas
# Table: Users
# 
# +-------------+---------+
# | Column Name | Type    |
# +-------------+---------+
# | user_id     | int     |
# | name        | varchar |
# +-------------+---------+
# user_id is the column with unique values for this table.
# Each row of this table contains user id and name.
# 
# Table: Rides
# 
# +--------------+------+
# | Column Name  | Type |
# +--------------+------+
# | ride_id      | int  |
# | user_id      | int  |
# | distance     | int  |
# +--------------+------+
# ride_id is the column of unique values for this table.
# Each row of this table contains ride id, user id, and traveled distance.
# 
# Write a solution to calculate the distance traveled by each user. If there is a user who hasn't completed any rides, then their distance should be considered as 0. Output the user_id, name and total traveled distance.
# 
# Return the result table ordered by user_id in ascending order.
# 
# The result format is in the following example.
#
# Example 1:
# Input:
# Users table:
# +---------+---------+
# | user_id | name    |
# +---------+---------+
# | 17      | Addison |
# | 14      | Ethan   |
# | 4       | Michael |
# | 2       | Avery   |
# | 10      | Eleanor |
# +---------+---------+
# Rides table:
# +---------+---------+----------+
# | ride_id | user_id | distance |
# +---------+---------+----------+
# | 72      | 17      | 160      |
# | 42      | 14      | 161      |
# | 45      | 4       | 59       |
# | 32      | 2       | 197      |
# | 15      | 4       | 357      |
# | 56      | 2       | 196      |
# | 10      | 14      | 25       |
# +---------+---------+----------+
# Output:
# +---------+---------+-------------------+
# | user_id | name    | traveled distance |
# +---------+---------+-------------------+
# | 2       | Avery   | 393               |
# | 4       | Michael | 416               |
# | 10      | Eleanor | 0                 |
# | 14      | Ethan   | 186               |
# | 17      | Addison | 160               |
# +---------+---------+-------------------+
# Explanation:
# -  User id 2 completed two journeys of 197 and 196, resulting in a combined travel distance of 393.
# -  User id 4 completed two journeys of 59 and 357, resulting in a combined travel distance of 416.
# -  User id 14 completed two journeys of 161 and 25, resulting in a combined travel distance of 186.
# -  User id 16 completed only one journey of 160.
# -  User id 10 did not complete any journeys, thus the total travel distance remains at 0.
# Returning the table orderd by user_id in ascending order.

import pandas as pd

def get_total_distance(users: pd.DataFrame, rides: pd.DataFrame) -> pd.DataFrame:
  merged = users.merge(rides, on='user_id', how='left')
  result = merged.groupby(['user_id', 'name'], as_index=False)['distance'].sum().fillna(0)
  result.columns = ['user_id', 'name', 'traveled distance']
  result['traveled distance'] = result['traveled distance'].astype(int)
  return result.sort_values('user_id')