Tente esse
SELECT id, category_id, rating
FROM articles a1
WHERE rating =
(SELECT MAX(a2.rating) FROM articles a2 WHERE a1.category_id = a2.category_id)
OU
SELECT * FROM (SELECT * FROM articles ORDER BY rating DESC) AS a1 GROUP BY a1.rating;
SELECT id, category_id, rating
FROM articles a1
WHERE rating =
(SELECT MAX(a2.rating) FROM articles a2 WHERE a1.category_id = a2.category_id)
SELECT * FROM (SELECT * FROM articles ORDER BY rating DESC) AS a1 GROUP BY a1.rating;
Estrutura de Alta Disponibilidade do MySQL Explicada – Parte I:Introdução
Como obter valores de coluna de identidade sem mencionar o nome da coluna de identidade em Select - SQL Server / T-SQL Tutorial Part 46
10 dicas úteis sobre o ajuste de desempenho do MySQL
Como proteger bancos de dados MySQL de campanhas de ransomware