| Competition | Goals | Apps | Started | Minutes | Sub On | Sub Off | ||
|---|---|---|---|---|---|---|---|---|
| England | ||||||||
| League One | 2 | 76 | 69 | 6,155' | 7 | 5 | 12 | 0 |
| Championship | 1 | 68 | 53 | 4,603' | 15 | 18 | 12 | 0 |
| League Two | 0 | 16 | 9 | 864' | 7 | 2 | 2 | 0 |
| EFL Vertu Trophy | 0 | 11 | 11 | 1,020' | 0 | 0 | 0 | 0 |
| FA Cup | 0 | 9 | 9 | 744' | 0 | 4 | 2 | 0 |
| Carabao Cup | 0 | 5 | 3 | 360' | 2 | 1 | 1 | 0 |
| Premier League | 0 | 1 | 0 | -2' | 1 | 0 | 0 | 0 |
| Scotland | ||||||||
| Premiership | 0 | 9 | 9 | 810' | 0 | 0 | 0 | 0 |
| FA Cup | 0 | 1 | 1 | 90' | 0 | 0 | 0 | 0 |
| Total | 3 | 196 | 164 | 14,644' | 32 | 30 | 29 | 0 |
| Club | Season | League | National cup | League cup | Total | |||||
|---|---|---|---|---|---|---|---|---|---|---|
| Division | Apps | Gls | Apps | Gls | Apps | Gls | Apps | Gls | ||
Luton Town | 2016/2017 | League Two | 3 | 0 | 3 | 0 | - | - | 6 | 0 |
| 2017/2018 | League Two | 3 | 0 | 3 | 0 | - | - | 6 | 0 | |
| Total | 6 | 0 | 6 | 0 | - | - | 12 | 0 | ||
Grimsby Town | 2018/2019 | League Two | 10 | 0 | 2 | 0 | - | - | 12 | 0 |
| Total | 10 | 0 | 2 | 0 | - | - | 12 | 0 | ||
St. Mirren | 2019/2020 | Premiership | 9 | 0 | 1 | 0 | - | - | 10 | 0 |
| Total | 9 | 0 | 1 | 0 | - | - | 10 | 0 | ||
Norwich City | 2019/2020 | Premier League | 1 | 0 | - | - | - | - | 1 | 0 |
| Total | 1 | 0 | - | - | - | - | 1 | 0 | ||
Charlton Athletic | 2020/2021 | League One | 22 | 0 | - | - | - | - | 22 | 0 |
| 2021/2022 | League One | 37 | 1 | 3 | 0 | - | - | 40 | 1 | |
| Total | 59 | 1 | 3 | 0 | - | - | 62 | 1 | ||
Sheffield Wednesday | 2022/2023 | League One | 17 | 1 | 2 | 0 | - | - | 19 | 1 |
| 2023/2024 | Championship | 35 | 0 | 3 | 0 | 1 | 0 | 39 | 0 | |
| 2024/2025 | Championship | 13 | 0 | - | - | 2 | 0 | 15 | 0 | |
| Total | 65 | 1 | 5 | 0 | 3 | 0 | 73 | 1 | ||
Hull City | 2025/2026 | Championship | 15 | 1 | 1 | 0 | 1 | 0 | 17 | 1 |
| Total | 15 | 1 | 1 | 0 | 1 | 0 | 17 | 1 | ||
Bolton Wanderers | 2026/2027 | Championship | 5 | 0 | - | - | 1 | 0 | 6 | 0 |
| Total | 5 | 0 | - | - | 1 | 0 | 6 | 0 | ||
| Career total | 170 | 3 | 18 | 0 | 5 | 0 | 193 | 3 | ||