#2329
Easy Database Product sales analysis v
Database
70.9% acceptance
Mar 31, 2026
35
7
No description available.
Solution
Pandas
Time O(1)
Space O(1)
# Table: Sales
#
# +-------------+-------+
# | Column Name | Type |
# +-------------+-------+
# | sale_id | int |
# | product_id | int |
# | user_id | int |
# | quantity | int |
# +-------------+-------+
# sale_id contains unique values.
# product_id is a foreign key (column with unique values) to Product table.
# Each row of this table shows the ID of the product and the quantity purchased by a user.
#
#
#
# Table: Product
#
# +-------------+------+
# | Column Name | Type |
# +-------------+------+
# | product_id | int |
# | price | int |
# +-------------+------+
# product_id contains unique values.
# Each row of this table indicates the price of each product.
#
#
#
# Write a solution to report the spending of each user.
#
# Return the resulting table ordered by spending in descending order. In case of a tie, order them by user_id in ascending order.
#
# The result format is in the following example.
#
# Example 1:
# Input:
# Sales table:
# +---------+------------+---------+----------+
# | sale_id | product_id | user_id | quantity |
# +---------+------------+---------+----------+
# | 1 | 1 | 101 | 10 |
# | 2 | 2 | 101 | 1 |
# | 3 | 3 | 102 | 3 |
# | 4 | 3 | 102 | 2 |
# | 5 | 2 | 103 | 3 |
# +---------+------------+---------+----------+
# Product table:
# +------------+-------+
# | product_id | price |
# +------------+-------+
# | 1 | 10 |
# | 2 | 25 |
# | 3 | 15 |
# +------------+-------+
# Output:
# +---------+----------+
# | user_id | spending |
# +---------+----------+
# | 101 | 125 |
# | 102 | 75 |
# | 103 | 75 |
# +---------+----------+
# Explanation:
# User 101 spent 10 * 10 + 1 * 25 = 125.
# User 102 spent 3 * 15 + 2 * 15 = 75.
# User 103 spent 3 * 25 = 75.
# Users 102 and 103 spent the same amount and we break the tie by their ID while user 101 is on the top.
import pandas as pd
def product_sales_analysis(sales: pd.DataFrame, product: pd.DataFrame) -> pd.DataFrame:
merged = sales.merge(product, on='product_id')
merged['spending'] = merged['quantity'] * merged['price']
result = merged.groupby('user_id')['spending'].sum().reset_index()
result = result.sort_values(['spending', 'user_id'], ascending=[False, True])
return result