All problems

Bigger Than Typical

hardSQLSubqueries

The anomaly queue at Northline Bank holds movements that are unusually large for this ledger, and "unusually large" is not a number anybody wrote down — it is whatever the mean movement happens to be right now, recomputed as the ledger grows.

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 three columns — id, type and amount — for every movement whose amount is strictly greater than the mean amount across the whole ledger, taken as stored with signs included. Largest amount first; two movements on the same amount come back with the smaller id first.

Example output — shape only, on invented movements. Any type can qualify, so long as the stored amount clears the ledger-wide mean:

id type amount
47 deposit 9400
33 deposit 7100
51 transfer 6250

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…