Sales Analysis I
EasyUpdated: Aug 2, 2025
Practice on:
Problem
Table: Product
+--------------+---------+
| Column Name | Type |
+--------------+---------+
| product_id | int |
| product_name | varchar |
| unit_price | int |
+--------------+---------+
product_id is the primary key (column with unique values) of this table.
Each row of this table indicates the name and the price of each product.
Table: Sales
+-------------+---------+
| Column Name | Type |
+-------------+---------+
| seller_id | int |
| product_id | int |
| buyer_id | int |
| sale_date | date |
| quantity | int |
| price | int |
+-------------+---------+
This table can have repeated rows.
product_id is a foreign key (reference column) to the Product table.
Each row of this table contains some information about one sale.
Write a solution that reports the best seller by total sales price, If there is a tie, report them all.
Return the result table in any order.
The result format is in the following example.
Examples
Example 1:
Input:
Product table:
+------------+--------------+------------+
| product_id | product_name | unit_price |
+------------+--------------+------------+
| 1 | S8 | 1000 |
| 2 | G4 | 800 |
| 3 | iPhone | 1400 |
+------------+--------------+------------+
Sales table:
+-----------+------------+----------+------------+----------+-------+
| seller_id | product_id | buyer_id | sale_date | quantity | price |
+-----------+------------+----------+------------+----------+-------+
| 1 | 1 | 1 | 2019-01-21 | 2 | 2000 |
| 1 | 2 | 2 | 2019-02-17 | 1 | 800 |
| 2 | 2 | 3 | 2019-06-02 | 1 | 800 |
| 3 | 3 | 4 | 2019-05-13 | 2 | 2800 |
+-----------+------------+----------+------------+----------+-------+
Output:
+-------------+
| seller_id |
+-------------+
| 1 |
| 3 |
+-------------+
Explanation: Both sellers with id 1 and 3 sold products with the most total price of 2800.
Solution
Method 1 - Group and Max
Intuition
We want the seller(s) with the highest total sales price. We can group by seller_id, sum the price, and select those with the maximum sum.
Approach
- Group Sales by seller_id, sum the price for each seller.
- Find the maximum total price.
- Select all seller_ids with that total.
Code
MySQL
SELECT seller_id
FROM (
SELECT seller_id, SUM(price) AS total
FROM Sales
GROUP BY seller_id
) t
WHERE total = (SELECT MAX(total) FROM (SELECT SUM(price) AS total FROM Sales GROUP BY seller_id) x);
PostgreSQL
SELECT seller_id
FROM (
SELECT seller_id, SUM(price) AS total
FROM Sales
GROUP BY seller_id
) t
WHERE total = (SELECT MAX(total) FROM (SELECT SUM(price) AS total FROM Sales GROUP BY seller_id) x);
Python (pandas)
# Sales is a pandas DataFrame
import pandas as pd
def sales_analysis_i(Sales):
totals = Sales.groupby('seller_id')['price'].sum()
max_total = totals.max()
result = totals[totals == max_total].index.to_frame(index=False)
return result
# result = sales_analysis_i(Sales)
Complexity
- ⏰ Time complexity:
O(N)(N = number of sales) - 🧺 Space complexity:
O(S)(S = number of sellers)