Court Geometry
Derived Aggregations
Playbook for the 16 agg_ tables that precompute common analytical rollups
Derived Aggregation Tables
Derived tables are precomputed agg_* outputs built for repeat possessions: the summaries you know analysts will ask for again, where rebuilding from raw game grain every time would just be wasted dribbles.
Use agg_ tables when the question repeats often enough to deserve a reusable set play. Use analytics_ views when the win comes from pre-joined context instead of a rollup.
How to use this page
- Ask whether the question is repeated summary work. If yes, start with
agg_. - Choose the cluster: player, team/lineup, or league/shot context.
- Drop back to Facts & Bridges if the rollup removes a field or split you still need.
Quick navigation
Choose the right rollup cluster
Start with Choose the rollup when you need the fastest way to map a player, team, lineup, or league question to the right aggregate family.
Player aggregation surfaces
Go to Player aggregation bench unit for career, season, per-minute, rolling-form, clutch, and on/off summaries.
Team and league summaries
Jump to Team and lineup aggregation bench unit or League-context aggregations when the question is bigger than one player.
Know when to drop down
If the rollup hides too much, fall back to Facts & Bridges. If you need exact schema-backed columns, finish on Star Reference.
Pick agg_ vs facts vs analytics views
| If you need... | Best surface | Why |
|---|---|---|
| a reusable summary at a natural player/team/league rollup | agg_ tables | They keep the summary at its intended analytical grain |
| a pre-joined convenience read for a common workflow | Analytics Views | Those optimize for reduced join work, not just rollup reuse |
| a field or split only available at atomic grain | Facts & Bridges | Fact tables preserve the base detail that rollups intentionally compress |
Choose the rollup
Player form and value
agg_player_bio, agg_player_season, agg_player_season_per36, agg_player_season_per48, agg_player_career, agg_player_rolling, agg_clutch_stats, and agg_on_off_splits cover the recurring player summary questions analysts ask every day.
Team and lineup shape
agg_team_season, agg_team_pace_and_efficiency, agg_team_franchise, and agg_lineup_efficiency package style, efficiency, franchise history, and lineup impact at reusable summary grain.
League context and shot profile
agg_league_leaders, agg_all_time_leaders, agg_shot_zones, and agg_shot_location_season keep leaderboards and spatial shooting summaries off the critical path for every notebook.
| Cluster | Tables in the rotation | Grain | Best for |
|---|---|---|---|
| Player form and value | agg_player_bio, agg_player_season, agg_player_season_per36, agg_player_season_per48, agg_player_career, agg_player_rolling, agg_clutch_stats, agg_on_off_splits | Player-season, player-game, or player/entity split | Career summaries, rolling form, normalized rates, and clutch/on-off context |
| Team and lineup shape | agg_team_season, agg_team_pace_and_efficiency, agg_team_franchise, agg_lineup_efficiency | Team-season, franchise row, or lineup-season | Pace, efficiency, franchise history, and lineup impact |
| League context and shot profile | agg_league_leaders, agg_all_time_leaders, agg_shot_zones, agg_shot_location_season | League-season, all-time row, or player-zone season | Leaderboards, shot maps, and contextual comparison around player/team outputs |
Fast picks by question
| If the question sounds like... | Start with | Why |
|---|---|---|
| "What does this player's season look like without rebuilding it from game rows?" | agg_player_season | It is the baseline player-season rollup |
| "How is this player trending recently?" | agg_player_rolling | The rolling windows are already computed |
| "How do these players compare on a minutes-normalized basis?" | agg_player_season_per36 or agg_player_season_per48 | The normalization is already packaged |
| "What is this team's style and efficiency profile?" | agg_team_pace_and_efficiency | Pace and efficiency live together at team-season grain |
| "What are the best five-man groups?" | agg_lineup_efficiency | It keeps lineup impact at the right unit of analysis |
| "Who leads the league or all-time list?" | agg_league_leaders or agg_all_time_leaders | Leaderboards are already rolled up and ranked for reuse |
| "How does the shot profile break down spatially?" | agg_shot_zones or agg_shot_location_season | These preserve the shooting summary without dropping to individual shots |
Player aggregation bench unit
| Table | What it summarizes | Reach for it when |
|---|---|---|
agg_player_bio | Season-level bio/profile rows | You want roster/profile context already aligned for analysis |
agg_player_season | Player season totals and averages | You need the baseline season stat line |
agg_player_season_per36 / agg_player_season_per48 | Minute-normalized player season rates | You want usage-neutral or minutes-adjusted comparisons |
agg_player_career | Career totals and career-rate summary | You are building long-arc player dossiers |
agg_player_rolling | 5/10/20-game rolling trends | You care about form, streaks, and recent trend lines |
agg_clutch_stats | Clutch scoring and baseline context | You are isolating late-game performance |
agg_on_off_splits | On/off splits by entity and team context | You need lineup-free impact framing without rebuilding split logic |
Team and lineup aggregation bench unit
| Table | What it summarizes | Reach for it when |
|---|---|---|
agg_team_season | Team season averages | You need the clean season snapshot |
agg_team_pace_and_efficiency | Pace and rating rollups | You are comparing style and efficiency together |
agg_team_franchise | Franchise history summary | You need long-horizon team history context |
agg_lineup_efficiency | Group/lineup efficiency | You are comparing five-man units instead of individual players |
League-context aggregations
| Table | What it summarizes | Reach for it when |
|---|---|---|
agg_league_leaders | Season category leaders | You need quick leaderboards |
agg_all_time_leaders | All-time leaderboard rows | You are doing historical leaderboard work |
agg_shot_zones | Player-season shooting by zone | You need a zone-by-zone shot report |
agg_shot_location_season | Shot-location season summaries | You want season-level spatial shooting context |
Good exit ramps
If agg_ is not enough because... | Next move |
|---|---|
| you still need atomic game, event, or participant detail | Drop to the relevant Facts family |
| you want the rollup plus rich denormalized context already attached | Check Analytics Views |
| you need exact field names, types, or nullability | Confirm the contract in the generated Star Reference |
If you still find yourself joining three or four tables after landing on an agg_ output, check Analytics Views. If you need a column that only exists at atomic grain, drop back to the relevant Facts family.
Keep moving
Stay in the same possession
Keep the mental model warm with adjacent pages, section hubs, and search-friendly routes into the same topic cluster.