All-Time Premier League Table
All 33 seasons · every team's all-time record, sorted by points
| Pos | Team | Played | W | D | L | Points |
|---|---|---|---|---|---|---|
| 1 | Manchester United | 1304 | 775 | 289 | 240 | 2614 |
| 2 | Arsenal | 1304 | 719 | 316 | 269 | 2473 |
| 3 | Liverpool | 1304 | 694 | 320 | 290 | 2402 |
| 4 | Chelsea | 1304 | 681 | 323 | 300 | 2366 |
| 5 | Tottenham Hotspur | 1304 | 561 | 309 | 434 | 1992 |
| 6 | Manchester City | 1114 | 573 | 239 | 302 | 1958 |
| 7 | Everton | 1304 | 463 | 366 | 475 | 1755 |
| 8 | Newcastle United | 1186 | 453 | 297 | 436 | 1656 |
| 9 | Aston Villa | 1190 | 430 | 328 | 432 | 1618 |
| 10 | West Ham United | 1148 | 381 | 289 | 478 | 1432 |
| 11 | Southampton | 962 | 282 | 254 | 426 | 1100 |
| 12 | Blackburn Rovers | 696 | 262 | 184 | 250 | 970 |
| 13 | Leeds United | 620 | 234 | 165 | 221 | 867 |
| 14 | Leicester City | 688 | 224 | 174 | 290 | 846 |
| 15 | Fulham | 722 | 220 | 185 | 317 | 845 |
| 16 | Crystal Palace | 654 | 193 | 177 | 284 | 756 |
| 17 | Sunderland | 646 | 167 | 171 | 308 | 672 |
| 18 | Middlesbrough | 574 | 165 | 169 | 240 | 664 |
| 19 | Bolton Wanderers | 494 | 149 | 128 | 217 | 575 |
| 20 | Wolverhampton Wanderers | 456 | 129 | 110 | 217 | 497 |
| 21 | West Bromwich Albion | 494 | 117 | 139 | 238 | 490 |
| 22 | Stoke City | 380 | 116 | 109 | 155 | 457 |
| 23 | Brighton and Hove Albion | 342 | 108 | 109 | 125 | 433 |
| 24 | Nottingham Forest | 350 | 108 | 98 | 144 | 422 |
| 25 | Bournemouth | 342 | 108 | 87 | 147 | 411 |
| 26 | Coventry City | 354 | 99 | 112 | 143 | 409 |
| 27 | Norwich City | 392 | 99 | 105 | 188 | 402 |
| 28 | Sheffield Wednesday | 316 | 101 | 89 | 126 | 392 |
| 29 | Wimbledon | 316 | 99 | 94 | 123 | 391 |
| 30 | Burnley | 380 | 92 | 95 | 193 | 371 |
| 31 | Charlton Athletic | 304 | 93 | 82 | 129 | 361 |
| 32 | Wigan Athletic | 304 | 85 | 76 | 143 | 331 |
| 33 | Swansea City | 266 | 82 | 66 | 118 | 312 |
| 34 | Queens Park Rangers | 278 | 81 | 65 | 132 | 308 |
| 35 | Portsmouth | 266 | 79 | 65 | 122 | 302 |
| 36 | Birmingham City | 266 | 73 | 82 | 111 | 301 |
| 37 | Watford | 304 | 73 | 66 | 165 | 285 |
| 38 | Derby County | 266 | 68 | 70 | 128 | 274 |
| 39 | Brentford | 190 | 68 | 49 | 73 | 253 |
| 40 | Ipswich Town | 240 | 61 | 63 | 116 | 246 |
| 41 | Sheffield United | 236 | 56 | 57 | 123 | 225 |
| 42 | Hull City | 190 | 41 | 48 | 101 | 171 |
| 43 | Reading | 114 | 32 | 23 | 59 | 119 |
| 44 | Oldham Athletic | 84 | 22 | 23 | 39 | 89 |
| 45 | Cardiff City | 76 | 17 | 13 | 46 | 64 |
| 46 | Bradford City | 76 | 14 | 20 | 42 | 62 |
| 47 | Huddersfield Town | 76 | 12 | 17 | 47 | 53 |
| 48 | Blackpool | 38 | 10 | 9 | 19 | 39 |
| 49 | Barnsley | 38 | 10 | 5 | 23 | 35 |
| 50 | Swindon Town | 42 | 5 | 15 | 22 | 30 |
| 51 | Luton Town | 38 | 6 | 8 | 24 | 26 |
SQL Query Used
-- All-time Premier League table (P/W/D/L/points)
copy (
with appearances as (
select
match_id,
home_team_abbr as team_abbr,
home_team_name as team_name,
'home' as side,
result
from "premier_league"."main"."fct_matches"
union all
select
match_id,
away_team_abbr as team_abbr,
away_team_name as team_name,
'away' as side,
result
from "premier_league"."main"."fct_matches"
)
select
team_abbr,
min(team_name) as team_name,
count(*) as matches_played,
count(*) filter (where side = 'home' and result = 'home_win'
or side = 'away' and result = 'away_win') as wins,
count(*) filter (where result = 'draw') as draws,
count(*) filter (where side = 'home' and result = 'away_win'
or side = 'away' and result = 'home_win') as losses,
3 * count(*) filter (where side = 'home' and result = 'home_win'
or side = 'away' and result = 'away_win')
+ count(*) filter (where result = 'draw') as points
from appearances
group by team_abbr
order by points desc, team_abbr
)
to 'assets/data/all_time_table.csv' (header, delimiter ',')