Retail Banking Operations Path · Mission 9 of 30Easy

NSF / OD fee revenue by FICO band

JOIN to customer attributes + CASE bucketing

The Brief

Marcus ChenRetail Banking COOretail-ops

Pre-read for the consumer banking strategy meeting. The CFPB found that ~9% of accounts pay ~79% of NSF/OD fees and the average fee is ~$35. I want the same view on our book — break NSF and OD fee revenue by customer FICO band: <600, 600-679, 680-739, 740+, plus a 'No FICO' bucket for the customers we couldn't pull a score on. Exclude waived fees (`waived_flag = 0`). Three columns: `fico_band`, `fee_events`, `fee_revenue` (rounded to 2 decimals). Sort by band low-to-high so the deck reads ascending.

You'll practice

JOINCASE bucketing

Tables & columns available

retailops_feesfact6 columns
ColumnTypeKey
fee_idINTPK
account_idINTFK → retail_accounts
post_dateTEXT
fee_codeTEXT
amountREAL
waived_flagINT
retail_accountsdim13 columns
ColumnTypeKey
account_idINTPK
customer_idINTFK → retail_customers
product_idINTFK → retail_products
branch_idINTFK → retail_branches
open_dateTEXT
close_dateTEXT
statusTEXT
ownership_typeTEXT
interest_rateREAL
original_balanceREAL
credit_limitREAL
fico_at_origINT
maturity_dateTEXT
retail_customersdim13 columns
ColumnTypeKey
customer_idINTPK
household_idTEXT
first_nameTEXT
last_nameTEXT
date_of_birthTEXT
stateTEXT
segmentTEXT
fico_currentINT
estimated_incomeREAL
kyc_riskTEXT
acquisition_channelTEXT
onboarded_dateTEXT
statusTEXT

Hints (3)

Each hint you reveal reduces the XP you can earn. Try the query first.

Hint 1

Fee events are in `retailops_fees` but the FICO score lives on the customer. You'll need to walk fees → accounts → customers to get there. NSF and OD are two of the fee_codes; filter to those two only.

Hint 2

Build the band with CASE WHEN on `fico_current` — order branches tightest to widest. The NULL case (customers with no FICO pull) needs its own ELSE branch, otherwise those rows drop silently when you GROUP BY.

Hint 3

GROUP BY the band, COUNT(*) for events, SUM(amount) for revenue, ROUND the dollar column to 2. Sort the bands ascending — prefix labels with a digit ('1_<600', '2_600-679', ...) so ORDER BY puts them in score order rather than alphabetical.