cswork / libraryOpen practice workspace

Coding questions · Amazon

Create Country-Level Spend Report Using Pandas

This question evaluates proficiency in data manipulation using pandas, including relational joins and aggregation to produce country-level summary statistics like totals and averages.

users

+---------+---------+
| user_id | country |
+---------+---------+
| 1       | US      |
| 2       | CA      |
| 3       | US      |
+---------+---------+

transactions

+--------+---------+--------+
| txn_id | user_id | amount |
+--------+---------+--------+
| 10     | 1       | 30.5   |
| 11     | 1       | 15.0   |
| 12     | 2       | 20.0   |
+--------+---------+--------+
Scenario

E-commerce analytics team has separate user and transaction tables and needs country-level spend reporting.

Question

Using pandas, merge the users and transactions DataFrames on user_id; keep only rows with matching users. Group the merged result by country, computing total and average amount, and return a DataFrame sorted by total spend descending.

Hints

Apply pandas merge, groupby, agg, and sort_values correctly.

Country-level total and average transaction amounts

You are given a users table and a transactions table. Write an SQL query to:

  1. Perform an INNER JOIN between users and transactions on user_id (keeping only users that have at least one transaction).
  2. Group the joined data by country.
  3. For each country, compute the total transaction amount and the average transaction amount.
  4. Return the result ordered by total transaction amount in descending order. Name the output columns country, total_amount, and average_amount.

Table users

columntypeconstraints
user_idINTEGERPRIMARY KEY, NOT NULL
countryVARCHAR(2)NOT NULL

Sample data:

countryuser_id
US1
CA2
US3

Table transactions

columntypeconstraints
txn_idINTEGERPRIMARY KEY, NOT NULL
user_idINTEGERNOT NULL, FOREIGN KEY REFERENCES users(user_id)
amountDECIMAL(10,2)NOT NULL

Sample data:

amounttxn_iduser_id
30.5101
15111
20122

Expected output

One row per country showing total and average transaction amounts for users with at least one transaction, ordered by total_amount in descending order.

average_amountcountrytotal_amount
22.75US45.5
20CA20

Hints

  1. Use an INNER JOIN on users.user_id = transactions.user_id to keep only matching rows.
  2. Group by u.country and compute SUM(t.amount) and AVG(t.amount).
  3. ORDER BY total_amount DESC.