Borussia Dortmund confirmed their place in next season's UEFA Champions League despite losing 3-1 away to Hoffenheim on the final day of the 2017/18 Bundesliga season on Saturday.
Hoffenheim's win meant they leapfrogged Dortmund into third, but the latter's top-four place was still safe thanks to Bayer Leverkusen not managing to beat Hannover by three clear goals.
At the other end of the table, Hamburg were relegated for the first time, which was made worse by fan protests at the end of their 2-1 win over Borussia Monchengladbach.
Hamburg went down thanks in large part to Wolfsburg beating already relegated Cologne 4-1, a result good enough to put the Wolves in the playoffs to seal top-flight safety. Meanwhile, Freiburg survived the drop altogether after winning 2-0 against Augsburg.
There was a shock for champions Bayern Munich, whose title party turned sour when Stuttgart scored four at the Allianz Arena.
Here are the results from the final day of action in Germany's top flight:
- Mainz 1-2 Werder Bremen
- Freiburg 2-0 Augsburg
- Schalke 04 1-0 Eintracht Frankfurt
- Bayer Leverkusen 3-2 Hannover 96
- Hamburg 2-1 Borussia Monchengladbach
- Wolfsburg 4-1 Cologne
- Hoffenheim 3-1 Borussia Dortmund
- Bayern Munich 1-4 Stuttgart
- Hertha Berlin 2-6 RB Leipzig
Here's what the final table looks like:
1. Bayern Munich: 34 (matches played), +64 (goal difference), 84 (points)
2. Schalke 04: 34, +16, 63
3. Hoffenheim: 34, +18, 55
4. Borussia Dortmund: 34, +17, 55
5. Bayer Leverkusen: 34, +14, 55
6. RB Leipzig: 34, +4, 53
7. Stuttgart: 34, 0, 51
8. Eintracht Frankfurt: 34, 0, 49
9. Borussia Monchengladbach: 34, -5, 47
10. Hertha Berlin: 34, -3, 43
11. Werder Bremen: 34, -3, 42
12. Augsburg: 34, -3, 41
13. Hannover 96: 34, -10, 39
14. Mainz: 34, -14, 36
15. Freiburg: 34, -24, 36
16. Wolfsburg: 34, -12, 33
17. Hamburg: 34, -24, 31
18. Cologne: 34, -35, 22
Full standings are available, per the Bundesliga official website.
Hoffenheim took the lead in bizarre fashion on 26 minutes when Dortmund goalkeeper Roman Burki attempted a square pass across his own box but missed his target under pressure.
Instead, the ball rolled invitingly to Andrej Kramaric, who didn't pass up the gift.
Pressing from the front has become a happy habit for Hoffenheim this season, per OptaFranz:
Dortmund hit back through Marco Reus to keep the Champions League on the club's radar, per Bundesliga English:
However, Hoffenheim were soon back in front thanks to Adam Szalai's finish.
WhoScored.com detailed how tight the race had become to gain entry into next season's edition of Europe's premier club competition:
Pavel Kaderabek's goal knocked Dortmund out of third and put Hoffenheim in the box seat. It also meant Leverkusen still had hope of reaching the Champions League.
Squawka Football put the achievement by manager Julian Nagelsmann into appropriate context:
Bayer Leverkusen were also in with a shout of finishing fourth and did their case a power of good by building a 3-0 lead against Hannover. A brace from forward Lucas Alario and a Julian Brandt goal put Heiko Herrlich's team in front and relying on Hoffenheim to do them a favour.
As things stood, Leverkusen needed two more goals to qualify ahead of Dortmund. Yet Herrlich's men felt aggrieved after having a late penalty given and then denied once the referee had consulted VAR.
A pair of stoppage-time goals from Hannover rendered Leverkusen's efforts academic.
Leverkusen and Hoffenheim winning meant results weren't going RB Leipzig's way. Even so, manager Ralph Hasenhuttl's team still put on a show in the German capital, racing to a 3-1 lead over Hertha Berlin.
Dayot Upamecano, Ademola Lookman and Jean-Kevin Augustin were all on the scoresheet for the visitors in the opening 45 minutes. Vedad Ibisevic had equalised for Hertha amid a frantic opening 10 minutes that included three goals.
Everton loanee Lookman has been in prolific form during his time in the Bundesliga, per Squawka Football:
Timo Werner scored a fourth for Leipzig early in the second half, as the visitors turned on the style. Augustin and Bruma added goals late on.
Bayern's title party resembled a damp squib as Stuttgart built a 4-1 lead at the Allianz Arena. Daniel Ginczek (twice), Anastasios Donis and Chadrac Akolo all scored, while Corentin Tolisso managed Die Roten's lone response.
Bayern's U.S. Twitter account summed up the feeling of bewilderment in Munich:
Stuttgart's performance was beyond impressive, but Leipzig's lead meant it would count for nought in the race to play in a European tournament next season.
The relegation battle took a decisive turn when Divock Origi put Wolfsburg in front against Cologne. The Liverpool loanee's goal meant Hamburg were headed down, despite Lewis Holtby firing them in front against Borussia Monchengladbach.
Wolfsburg sealed Hamburg's fate when Robin Knoche added a third:
Hamburg's fate being confirmed led to ugly scenes at the Volksparkstadion. Flares were set off in the stands, with police and stewards forced to form a guard on the pitch while play was stopped.
Benjamin Alvarez of Deutsche Welle relayed an image of the scenes:
Play eventually resumed long enough to see out the final whistle and bring Hamburg's lengthy stay in the Bundesliga to a close:
Wolfsburg will need to win a two-legged play-off against Holstein Kiel, the team that finished in third place in Bundesliga 2, to avoid relegation from the top flight.
Freiburg avoided the spectre of a relegation play-off by beating Augsburg. Goals from Nicolas Hofler and Tim Kleindienst put Freiburg firmly in charge of their own fate.
Elsewhere, runners-up Schalke 04 signed off in style by handling Eintracht Frankfurt at home. Guido Burgstaller opened the scoring in the 26th minute for the hosts in the final game in charge for Eintracht boss Niko Kovac, who will leave Frankfurt to succeed Jupp Heynckes at Bayern Munich in the summer.
For Schalke, another goal merely continued the club's impressive scoring run on the watch of manager Domenico Tedesco:
Hamburg's over five-decade stay in the top flight will sadly be remembered for its nasty end, yet Wolfsburg have kept their hopes of ultimately staying up alive.
At the other end, Hoffenheim have produced a superb achievement to finish a place higher than last season, despite losing Sebastian Rudy and Niklas Sule to Bayern last summer.