Payer Claims & Appeals Analytics Path · Mission 7 of 25Medium

Avg paid_amt by plan_type × funding

Two-table JOIN with a status filter and a multi-column GROUP BY. Practice routing claims through dim_plans for plan attributes, applying AVG on a money column, and grouping on two dimensions — the canonical actuarial pricing cut.

The Brief

Marcus BellFinance Analyst — Payer Operationsslack-dm

Actuarial team is rebuilding the pricing model and needs a per-plan-type, per-funding average paid amount. From fact_claims joined to dim_plans, restrict to status = 'paid' (denied and pending claims have zero or in-flight paid_amt and would drag the average down), then give me plan_type, funding, claim_count, and avg_paid (rounded to 2 decimals). Sort by avg_paid DESC so the high-cost cells lead. Expect one row per (plan_type, funding) combination that actually has paid claims — not every cell is populated, that's fine.

You'll practice

INNER JOINAVGGROUP BY multi-key

Tables & columns available

fact_claimsfact11 columns
ColumnTypeKey
claim_idINTPK
member_idINTFK → dim_members
provider_idINTFK → dim_providers_payer
plan_idINTFK → dim_plans
service_dateTEXT
cpt_codeTEXT
place_of_serviceTEXT
billed_amtREAL
allowed_amtREAL
paid_amtREAL
statusTEXT
dim_plansdim5 columns
ColumnTypeKey
plan_idINTPK
plan_nameTEXT
plan_typeTEXT
fundingTEXT
metal_tierTEXT

Hints (3)

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

Hint 1

Two-table aggregate: claims joined to plans on plan_id. The status filter is a WHERE clause — restrict to paid before aggregating so pending/denied rows don't dilute the average.

Hint 2

GROUP BY two columns: plan_type and funding. The grain of the output is one row per (plan_type, funding) combination present in the paid-claims subset; cells with no paid claims won't appear.

Hint 3

AVG over paid_amt, rounded to 2 decimals (money convention). Sort descending on the average so the high-cost plan/funding combinations lead the report.