All-Time Premier League Table
All 33 seasons · every team's all-time record, sorted by points
PosTeamPlayedWDLPoints
1Manchester United13047752892402614
2Arsenal13047193162692473
3Liverpool13046943202902402
4Chelsea13046813233002366
5Tottenham Hotspur13045613094341992
6Manchester City11145732393021958
7Everton13044633664751755
8Newcastle United11864532974361656
9Aston Villa11904303284321618
10West Ham United11483812894781432
11Southampton9622822544261100
12Blackburn Rovers696262184250970
13Leeds United620234165221867
14Leicester City688224174290846
15Fulham722220185317845
16Crystal Palace654193177284756
17Sunderland646167171308672
18Middlesbrough574165169240664
19Bolton Wanderers494149128217575
20Wolverhampton Wanderers456129110217497
21West Bromwich Albion494117139238490
22Stoke City380116109155457
23Brighton and Hove Albion342108109125433
24Nottingham Forest35010898144422
25Bournemouth34210887147411
26Coventry City35499112143409
27Norwich City39299105188402
28Sheffield Wednesday31610189126392
29Wimbledon3169994123391
30Burnley3809295193371
31Charlton Athletic3049382129361
32Wigan Athletic3048576143331
33Swansea City2668266118312
34Queens Park Rangers2788165132308
35Portsmouth2667965122302
36Birmingham City2667382111301
37Watford3047366165285
38Derby County2666870128274
39Brentford190684973253
40Ipswich Town2406163116246
41Sheffield United2365657123225
42Hull City1904148101171
43Reading114322359119
44Oldham Athletic8422233989
45Cardiff City7617134664
46Bradford City7614204262
47Huddersfield Town7612174753
48Blackpool381091939
49Barnsley381052335
50Swindon Town425152230
51Luton Town38682426
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 ',')