Real Madrid are through to the Champions League last 16 as Group D winners while Atletico Madrid beat Porto in Group B to finish second behind Liverpool.
Real Madrid finished top of Group D as goals from Toni Kroos and Marco Asensio secured a 2-0 home win over Inter Milan, who had Nicolo Barella sent off.
Both teams had already booked their last-16 places and Real ended on 15 points from six games, five more than second-placed Inter.
Kroos struck the opener in the 17th minute with a crisp low shot from 20 metres which flashed past goalkeeper Samir Handanovic – the 1,000th goal scored in the European Cup and Champions League by the record 13-times champions.
Referee Felix Brych showed Barella a straight red card in the 64th minute. The Italy midfielder retaliated after he rubbed shoulders with Rodrygo by the touchline and crashed into the panel boards, swinging his arm and leg at the Brazilian while he was still on the ground.
Inter were on the back foot and substitute Asensio made it 2-0 with a superb goal in the 79th minute shortly after coming on for Rodrygo. Crisp one-touch passing left the Spanish forward with time and space on the edge of the penalty area to curl a delightful shot which flew into the back of the net off the post.
Sheriff Tiraspol will head into the Europa League after finishing third in the group. Boban Nikolov’s injury-time equaliser earned the Moldovan minnows a 1-1 draw at Shakhtar Donetsk.
Atletico Madrid made it through to the knockout stages and broke Porto‘s hearts with victory at Estadio do Dragao in a match full of incident in Group B.
Atletico had to win to progress and they took the lead after 56 minutes through Antoine Griezmann. However, Yannick Carrasco’s 67th-minute red card made their task more difficult.
The hosts shot themselves spectacularly in the foot, though, when they were reduced to 10 men with the sending off of Borges Wendell.
As Porto pushed for the goal that would keep them in the competition, they were twice hit on the counter attack in injury time through goals from Rodrigo De Paul and Angel Correa.
Sergio Oliveira tucked away a very late penalty but it was too little too late.
AC Milan are out of Europe this season after losing 2-1 to Liverpool at San Siro. The hosts led through Fikayo Tomori’s tap-in but goals from Mohamed Salah and Divock Origi either side of half-time saw Liverpool make it six wins from six matches in the group – the first English side to do so in the Champions League.
Borussia Dortmund beat Besiktas 5-0, but it was not enough for them to go through and it will also be Europa League football for them in the new year.
Erling Haaland and Marco Reus both scored twice but it was only good enough for third place in the group, despite Sporting Lisbon losing 4-2 at Ajax.
Sebastien Haller kept up his scoring streak as the Dutch side ended the Champions League group stage with a 100 per cent record.
The former West Ham striker became only the second player after Cristiano Ronaldo in 2017-18 to score in each game of the six-match group phase as he tucked away an eighth-minute penalty to take his tally in this year’s competition to 10.
Sporting equalised through Nuno Santos in the 22nd minute but Brazilian Antony restored the Dutch sides lead just before half-time after a horror defensive error by the visitors.
David Neres extended Ajax’s advantage after 58 minutes and four minutes, later Steven Berghuis added the fourth. Sporting got a 78th-minute consolation with Bruno Tabatas thunderous side-footed shot off the underside of the crossbar.
The top two places in Group A were already decided but RB Leipzig’s 2-1 home win over group winners Manchester City kept them in Europe.
Goals from Dominik Szoboszlai and Andre Silva sealed third place, despite Riyad Mahrez’s reply for the English champions – who had Kyle Walker sent off.
Kylian Mbappe and Lionel Messi each scored twice in Paris Saint Germain’s 4-1 win against Club Brugge.
Visiting goalkeeper Simon Mignolet clumsily punched Nuno Mendes’s cross into the path of Mbappe who fired home after two minutes and the striker was at it again five minutes later when he volleyed past the Belgian from Angel Di Maria’s pass.
Mbappe is the youngest player to reach 30 goals in the Champions League, less than two weeks before his 23rd birthday.
Messi added the third seven minutes before half-time with a trademark curled attempt from outside the area and although Mats Rits pulled one back in the 68th minute, PSG were always in control.
Messi wrapped up a comfortable victory with a late penalty after being brought down by substitute Ignace Van der Brempt.