| Metric | Bayer Leverkusen | RB Leipzig |
|---|---|---|
| Possession | 51% | 49% |
| Shots | 16 | 9 |
| Shots on target | 5 | 3 |
| Shots off target | 9 | 5 |
| Corners | 9 | 6 |
| Fouls | 14 | 8 |
| Yellow cards | 2 | 3 |
| Red cards | 0 | 0 |
| Offsides | 1 | 1 |
| Goalkeeper saves | 3 | 3 |
Leipzig's first setback came when Antonio Nusa was booked in the 11th minute. Brajan Gruda made way for Tidiam Gomis at 25', and Nkunku's effort was ruled out by VAR ten minutes later. Leverkusen took advantage, with Schick breaking the deadlock just before half-time. Those were the key first-half highlights, as Gutierrez supplied the assist.
Gutierrez then scored in the 56th minute to give the hosts breathing room. Leipzig brought on Nicolas Seiwald and Andrija Maksimovic for Ezechiel Banzuzi and Romulo at 66'; Robert Andrich replaced Ezequiel Fernandez for Leverkusen five minutes later. Neil El Aynaoui was booked in the 74th minute, followed by Leverkusen's Edmond Tapsoba at 80'. Schick was replaced by Christian Michel Kofane at 76'.
Leipzig made two more changes at 83', with Samba Konate and Benjamin Henrichs coming on. Lucas Vazquez replaced Moussa Diaby at 88'. Henrichs and Afonso Bastardo Moreira were booked at 90'. The headline stats were simple: Leverkusen scored twice and Leipzig did not. The final score stayed 2-0, a concise summary of the hosts' control of the decisive moments.