Manchester City 4-1 Club Brugge
Manchester City moved into top spot in the group with a 4-1 win over Club Brugge.
Phil Foden opened the scoring in the 15th minute before John Stones put the ball into the back of his own net two minutes later. However, Riyad Mahrez, Raheem Sterling and Gabriel Jesus made sure of the points.
City are first with nine points, one point ahead of Paris Saint-Germain, while Club Brugge are in third with four points and need a miracle if they are to qualify for the next round.
RB Leipzig 2-2 Paris Saint-Germain
Paris Saint-Germain lost top spot in the group after playing to a 2-2 draw with RB Leipzig.
Christopher Nkunku gave Leipzig the lead in the eighth minute but a brace from Georginio Wijnaldum in the 21st and 39th minutes completed the turnaround for PSG, who had Lionel Messi missing from the matchday squad.
Liverpool 2-0 Atletico Madrid
Liverpool qualified for the knockout stages with a 2-0 victory over ten-man Atletico Madrid at Anfield.
Diogo Jota and Sadio Mane scored early in the first half before Atletico had Felipe sent off in the 36th minute. Diego Simeone's men failed to have a shot on target the entire match.
The Reds will finish top of the group, while Atleti are in third with four points, one point adrift of second-placed Porto.
AC Milan 1-1 FC Porto
AC Milan are on the brink of elimination after they were held to a 1-1 draw by Porto in Group B.
Porto had the perfect start after Luis Diaz gave them the lead in the sixth minute, planting a low strike into the bottom corner after he was setup by Marko Grujic on the edge of the box.
Milan were fortunate not to 2-0 down ten minutes inside the second stanza after Otavio's header came off the crossbar for the visitors.
Stefano Pioli's charges eventually levelled matters five minutes later after through Chancel Mbemba, who poked the loose ball into his own net, as the Rossoneri remain winless in the group.
Borussia Dortmund 1-3 Ajax Amsterdam
Ajax Amsterdam have secured their spot in the last 16 with a 2-1 win over ten-man Borussia Dortmund.
Marco Reus gave the Germans a 1-0 lead from the penalty spot but defender Mats Hummels was sent off soon afterwards, handing the momentum to Ajax, who turned it around through Dusan Tadic, Sebastian Haller and Davy Klaasen but only late in the second half.
Ajax are top with 12 points and four wins from four matches, while Dortmund are in second with six points, level on points with third-placed Sporting Lisbon.
Sporting Lisbon 4-0 Besiktas
Sporting Lisbon thrashed Besiktas 4-0 to keep themselves with a good chance of qualifying for the next round.
Pedro Goncalves netted a first-half brace before Paulinho and Pablo Sarabia got in on the act either side of half-time.
Besiktas, who had Josef de Souza sent off in the 90th minute, are now sure not to qualify, while Sporting are level on points with second-placed Dortmund.
Real Madrid 2-1 Shakhtar Donetsk
Real Madrid increased their chances of reaching the knockout phase after beating Shakhtar Donetsk 2-1 in Group D.
Karim Benzema gave Los Blancos the lead in the 14th minute with a tap-in from Vinicius Junior's cut-back.
Fernando eventually levelled matters just before the half-time break with a clinical strike into the top corner after Madrid failed to clear their lines.
Shakhtar were a tough nut to crack coming from the half-time break but Benzema restored Los Blancos' lead on the hour-mark with a smashing strike after another cut-back by Vinicius Junior.
Sheriff 1-3 Inter Milan
Inter Milan leapfrogged Sheriff into second position with a 3-0 triumph over the Moldovan minnows.
It took a while for Inter to break through but Marcelo Brozovic, Milan Skriniar and Alexis Sanchez netted in the second half before Adama Traore pulled a consolation goal back in stoppage time.
Inter now have seven points, two behind leaders Real Madrid, while Sheriff are in third with six points.
Here are the highest-paid players in the Champions League this season: