All problems

Concentration Risk

hardSQLSubqueriesArithmetic

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

Discussion

Sign in to join the discussion — reading is open to everyone.

Loading comments…