Match ends, Manchester City 2, TSG 1899 Hoffenheim 1.
Pep Guardiola said Manchester City's qualification for the Champions League last 16 was an "incredible success" as they finished top of Group F with a 2-1 win over Hoffenheim.
Leroy Sane scored twice as last season's quarter-finalists reached the knockout round for the sixth successive season.
"The managers are so good and the best teams in Europe are here," the City manager said.
"Some big, big teams have gone out. Inter Milan are an exceptional team but they are in the Europa League.
"In one day you sleep a little bit and you will be in the Europa League, so that is why I am so, so glad to be in the last 16."
City created most of the several clear-cut chances in an entertaining encounter, but only came to life after Hoffenheim took the lead through Andrej Kramaric's 16th-minute penalty.
Gabriel Jesus and Nicolas Otamendi hit the post with headers for the home side, while John Stones had one brilliantly saved by the well-worked Oliver Baumann.
The equaliser came when Sane fired in a fierce 25-yard free-kick in first-half stoppage time. His second of the game - and eighth of the season - came just after the hour mark when he finished off a swift counter-attack.
City are the only one of the four qualified English teams to win their group, and as a result can only draw one of four teams in the last 16 - Atletico Madrid, Schalke, Roma or Ajax.
- Football Daily podcast: Man Utd back to square one but Man City win
- Relive Wednesday's Champions League action
Early jolt for City
Any hopes City had of an easy ride against opponents with faint hopes of a Europa League spot were extinguished early.
The three-man defence was put on the backfoot with former Leicester forward Kramaric leading the early assaults. He first tested the City goal with a rising drive before an exquisite effort was thwarted by the athleticism of Ederson.
City rode their luck for 16 minutes until Aymeric Laporte pushed over Benjamin Hubner six yards from goal and conceded a penalty. Kramaric stepped up to slot in his ninth goal in nine games for club and country.
However, that strike had an undesired effect for Hoffenheim as City's attack moved up the gears.
Super Sane leads fightback
The German side were under incessant pressure for the rest of the game and Jesus, Otamendi and Stones had gone close before Sane equalised with a breathtaking strike.
They should have added to the lead after the break when Raheem Sterling broke clear from the edge of the area with Sane and Bernardo Silva in support.
The England winger passed to Sane, who instead of shooting elected to play the ball square to Silva - his shot was easily blocked by Baumann.
Guardiola looked on in disbelief along with the supporters inside the Etihad Stadium. However, Sane made amends moments later when, following another break, he took the ball past Baumann and slotted in.
England has a 'diamond'
It must be warming for England manager Gareth Southgate to know he has so much young attacking talent coming through. At Etihad Stadium, both Phil Foden and Reiss Nelson staked claims for consideration heading into qualification for Euro 2020.
The Under-21 attacking midfielders showed great endeavour and both went close to scoring. Nelson, on loan at Hoffenheim from Arsenal, came on at half-time and forced Ederson into a one-footed block before another strike was deflected wide.
As for Foden, who signed a new contract at City this week, he was denied the goal of the night by Baumann, who tipped over his stinging volley.
Guardiola said England has a "diamond" in Foden.
"Over 90 minutes, Phil was incredible the way he played. I have never had doubts about him, and I think I never will have doubts about the quality of that guy," he added.
"He is able to play with us, it does not matter where. He looks like he is skinny and not strong, but he is really really strong.
"Phil is an outstanding young player and a huge talent."
Man of the match - Leroy Sane (Manchester City)
City field youngest English club XI since 2012 - the stats
- Guardiola has led his side to first place in the Champions League group stages for the ninth time in 10 seasons.
- Hoffenheim have both scored and conceded in all 14 of their games in all European competitions.
- The average age of City's starting XI was 24 years and 95 days, the youngest for an English side in the Champions League since Manchester United against CFR Cluj in December 2012 (24 years 54 days).
- Hoffenheim are the first side to finish bottom of their Champions League group despite scoring 10-plus goals since Olympiakos in 2002-03 (11 goals).
- Sane is the first German to score twice against German opponents in the Champions League since Carsten Jancker for Bayern Munich against Kaiserslautern in March 1999.
- Kramaric has scored in each of his last four games in the Champions League for Hoffenheim (five goals).
- 5StonesSubstituted forWalkerat 45'minutes
- 35ZinchenkoSubstituted forDelphat 64'minutes
- 20Bernardo SilvaSubstituted forKompanyat 85'minutes
- 33Gabriel Jesus
- 15Adams Nuhu
- 8GeigerSubstituted forAmiriat 63'minutes
- 11GrillitschBooked at 64mins
- 13BittencourtSubstituted forBelfodilat 70'minutes
- 2BrenetSubstituted forNelsonat 45'minutes
- 34JoelintonBooked at 77mins
- Andreas Ekberg
- Shots on Target
Second Half ends, Manchester City 2, TSG 1899 Hoffenheim 1.
Corner, TSG 1899 Hoffenheim. Conceded by Fabian Delph.
Foul by Raheem Sterling (Manchester City).
Benjamin Hübner (TSG 1899 Hoffenheim) wins a free kick in the defensive half.
Corner, TSG 1899 Hoffenheim. Conceded by Aymeric Laporte.
Attempt saved. Gabriel Jesus (Manchester City) left footed shot from outside the box is saved in the bottom right corner. Assisted by Leroy Sané.
Offside, TSG 1899 Hoffenheim. Ishak Belfodil tries a through ball, but Nico Schulz is caught offside.
Attempt blocked. Nadiem Amiri (TSG 1899 Hoffenheim) right footed shot from the left side of the box is blocked. Assisted by Ishak Belfodil.
Substitution, Manchester City. Vincent Kompany replaces Bernardo Silva.
Attempt missed. Raheem Sterling (Manchester City) right footed shot from the centre of the box is close, but misses to the left. Assisted by Phil Foden with a cross.
Offside, TSG 1899 Hoffenheim. Andrej Kramaric tries a through ball, but Ishak Belfodil is caught offside.
Attempt blocked. Andrej Kramaric (TSG 1899 Hoffenheim) right footed shot from a difficult angle and long range on the left is blocked.
Foul by Kyle Walker (Manchester City).
Joelinton (TSG 1899 Hoffenheim) wins a free kick on the left wing.
Phil Foden (Manchester City) wins a free kick on the left wing.
Foul by Florian Grillitsch (TSG 1899 Hoffenheim).
Offside, TSG 1899 Hoffenheim. Benjamin Hübner tries a through ball, but Ishak Belfodil is caught offside.
Joelinton (TSG 1899 Hoffenheim) is shown the yellow card for a bad foul.
Raheem Sterling (Manchester City) wins a free kick in the attacking half.