Defensive · Shrewsbury · season-by-season, by competition, and every match.
Sang is operating at his career peak — the 2024/25 level is the level.
The record covers 6 seasons (2020/21–2025/26) across 5 clubs, including a move abroad — 130 appearances with 9 goal contributions from defence.
His best campaign on record is 2024/25 at Port Vale — Season rating 27, 0 goals and 2 assists in 28 games. 2023/24 was the leap — Season rating up 18 points at Port Vale. Output has held steady across his last 3 full seasons (22 → 26).
Made the jump to a higher division in 2021/22 (Premiership) and kept playing — 9 games that season.
| Season | Club | Apps | G | A | Rating | Season |
|---|---|---|---|---|---|---|
| 2025/26 | Shrewsbury | 36 | 2 | 2 | 25 | 26 |
| 2024/25 | Port Vale | 28 | 0 | 2 | 31 | 27 |
| 2023/24 | Port Vale | 38 | 0 | 2 | 43 | 22 |
| 2022/23 | Cardiff | 9 | 0 | 0 | 54 | 4 |
| 2021/22 | ST Johnstone | 9 | 0 | 1 | 43 | 8 |
| 2021/22 | Cardiff | 3 | 0 | 0 | 54 | 1 |
| 2020/21 | Cheltenham | 10 | 0 | 0 | 30 | 5 |
| Competition | Apps | Min | G | A | Rating |
|---|---|---|---|---|---|
| League Two | 36 | 2576 | 2 | 2 | 6.7 |
| EFL Trophy | 3 | 91 | 0 | 0 | 6.8 |
| League Cup | 1 | 90 | 1 | 0 | 8.0 |
| FA Cup | 2 | 83 | 1 | 0 | 7.0 |
| Date | Competition | Opponent | Res | Status | Min | G | A | Rating |
|---|---|---|---|---|---|---|---|---|
| Jul 9 | Friendlies Clubs | A Stoke City | 1-0 | Not in squad | — | |||
| Jul 19 | Friendlies Clubs | H Kidderminster Harriers | 3-0 | Not in squad | — | |||
| Jul 22 | Friendlies Clubs | H Bolton | 2-5 | Not in squad | — | |||
| Aug 2 | League Two | H Bromley | 0-0 | Played | 11 | 6.6 | ||
| Aug 9 | League Two | A Tranmere | 0-4 | Played | 45 | 5.7 | ||
| Aug 12 | League Cup | A Grimsby | 1-3 | Played | 90 | 1 | 8.0 | |
| Aug 16 | League Two | H Colchester | 0-2 | Not in squad | — | |||
| Aug 20 | League Two | A Notts County | 1-4 | Played | 90 | 6.7 | ||
| Aug 23 | League Two | A Swindon Town | 1-2 | Played | 90 | 6.9 | ||
| Aug 26 | EFL Trophy | H Chelsea U21 | 3-1 | Not in squad | — | |||
| Aug 30 | League Two | H Accrington ST | 0-0 | Played | 90 | 6.9 | ||
| Sep 2 | EFL Trophy | H Walsall | 1-3 | Played | 14 | 6.7 | ||
| Sep 6 | League Two | A Barnet | 3-1 | Played | 95 | 7.3 | ||
| Sep 13 | League Two | H Salford City | 1-3 | Played | 90 | 7.0 | ||
| Sep 20 | League Two | A Harrogate Town | 0-2 | Played | 90 | 6.3 | ||
| Sep 27 | League Two | H Milton Keynes Dons | 1-2 | Played | 89 | 6.3 | ||
| Oct 4 | League Two | A Barrow | 0-0 | Played | 80 | 6.3 | ||
| Oct 11 | League Two | H Cambridge United | 2-0 | Played | 87 | 6.7 | ||
| Oct 18 | League Two | H Crawley Town | 1-0 | Played | 68 | 6.9 | ||
| Oct 25 | League Two | A Oldham | 2-2 | Played | 90 | 6.5 | ||
| Nov 2 | FA Cup | A South Shields | 3-1 | Played | 45 | 1 | 7.2 | |
| Nov 8 | League Two | A Crewe | 1-3 | Played | 90 | 6.9 | ||
| Nov 11 | EFL Trophy | A Northampton | 1-2 | Played | 77 | 6.9 | ||
| Nov 15 | League Two | H Newport County | 1-0 | Played | 90 | 7.3 | ||
| Nov 22 | League Two | A Fleetwood Town | 1-3 | Played | 66 | 6.2 | ||
| Nov 29 | League Two | H Gillingham | 3-3 | Unused sub | 0 | — | ||
| Dec 6 | FA Cup | A Sutton Utd | 2-1 | Played | 38 | 6.7 | ||
| Dec 9 | League Two | H Grimsby | 1-1 | Not in squad | — | |||
| Dec 13 | League Two | A Walsall | 1-1 | Unused sub | 0 | — | ||
| Dec 20 | League Two | H Chesterfield | 0-1 | Played | 10 | 6.9 | ||
| Dec 26 | League Two | A Cheltenham | 1-3 | Played | 12 | 6.9 | ||
| Dec 29 | League Two | A Grimsby | 0-1 | Played | 89 | 6.2 | ||
| Jan 1 | League Two | H Bristol Rovers | 0-3 | Not in squad | — | |||
| Jan 10 | FA Cup | A Wolves | 1-6 | Not in squad | — | |||
| Jan 17 | League Two | H Harrogate Town | 1-0 | Not in squad | — | |||
| Jan 24 | League Two | A Milton Keynes Dons | 1-5 | Played | 18 | 1 | 7.3 | |
| Jan 27 | League Two | A Cambridge United | 0-1 | Played | 90 | 6.0 | ||
| Jan 31 | League Two | H Barnet | 0-0 | Played | 20 | 6.5 | ||
| Feb 7 | League Two | A Colchester | 0-2 | Played | 27 | 6.9 | ||
| Feb 10 | League Two | H Barrow | 2-1 | Played | 90 | 6.9 | ||
| Feb 14 | League Two | H Swindon Town | 3-1 | Played | 79 | 6.6 | ||
| Feb 17 | League Two | H Notts County | 1-0 | Played | 71 | 7.3 | ||
| Feb 21 | League Two | A Accrington ST | 2-0 | Played | 90 | 6.9 | ||
| Feb 24 | League Two | A Salford City | 2-1 | Played | 90 | 1 | 7.6 | |
| Feb 28 | League Two | H Walsall | 1-2 | Played | 90 | 6.6 | ||
| Mar 7 | League Two | A Chesterfield | 3-2 | Played | 90 | 2 | 8.3 | |
| Mar 14 | League Two | H Cheltenham | 0-2 | Played | 90 | 7.0 | ||
| Mar 17 | League Two | A Bristol Rovers | 0-1 | Played | 90 | 6.6 | ||
| Mar 21 | League Two | H Crewe | 0-4 | Played | 90 | 6.3 | ||
| Mar 28 | League Two | A Newport County | 0-1 | Played | 44 | 6.6 | ||
| Apr 3 | League Two | H Tranmere | 1-0 | Not in squad | — | |||
| Apr 7 | League Two | A Bromley | 1-2 | Not in squad | — | |||
| Apr 11 | League Two | H Oldham | 1-0 | Not in squad | — | |||
| Apr 18 | League Two | A Crawley Town | 0-0 | Played | 45 | 6.6 | ||
| Apr 25 | League Two | H Fleetwood Town | 2-2 | Unused sub | 0 | — | ||
| May 2 | League Two | A Gillingham | 0-1 | Played | 90 | 6.2 |