Concentration Risk
A branch of Northline Bank carries concentration risk when too much of its activity rests on too few customers: lose one of them and the branch's numbers collapse. Risk wants each customer's slice of the branch's total money moved, expressed as a percentage.
transactions — one row per movement of money. customer_id points at a row in customers; type is one of deposit, withdrawal or transfer; txn_date is the day it settled. The ledger is signed: money arriving in an account is stored as a positive amount, and money leaving it as a negative one, so a 600-dollar withdrawal is recorded as -600.
| id | customer_id | amount | type | txn_date |
|---|---|---|---|---|
| 1 | 1 | 500 | deposit | 2023-07-01 |
| 2 | 1 | -120 | withdrawal | 2023-07-03 |
| 3 | 2 | 1000 | deposit | 2023-07-02 |
| 4 | 2 | -300 | withdrawal | 2023-07-05 |
| 5 | 3 | 250 | deposit | 2023-07-04 |
| 6 | 3 | -600 | withdrawal | 2023-07-06 |
| 7 | 4 | 800 | deposit | 2023-07-07 |
| 8 | 4 | -450 | withdrawal | 2023-07-08 |
| 9 | 5 | 2000 | deposit | 2023-07-09 |
| 10 | 5 | -1500 | withdrawal | 2023-07-10 |
| 11 | 1 | -200 | transfer | 2023-07-11 |
| 12 | 3 | 400 | deposit | 2023-07-12 |
The table already exists in the database — there is nothing to create or load.
Task: Write a query that returns two columns, customer_id and volume_pct, one row per customer with at least one movement. volume_pct is the money that customer moved, ignoring direction, as a percentage of the money moved by everyone, rounded to 1 decimal place. Largest slice first; two customers on the same percentage come back with the smaller customer_id first.
Example output — shape only, on invented customers. The slices are percentages out of 100 and add up to the whole bank; two customers tie here, so the smaller id goes first:
| customer_id | volume_pct |
|---|---|
| 21 | 38.6 |
| 22 | 24.9 |
| 23 | 14.2 |
| 24 | 14.2 |
| 26 | 8.1 |
Sign in to solve this problem
Reading problems is free for everyone — solving them (Run, Submit, and tracking what you've solved) needs an account.
Sign in