Aqui é um excelente artigo na documentação oficial do MySQL:
Citar:
As linhas que mantêm o máximo em grupo de uma determinada coluna
Tarefa:Para cada artigo, encontre o revendedor ou revendedores com o preço mais caro.
Este problema pode ser resolvido com uma subconsulta como esta:
SELECT article, dealer, price
FROM shop s1
WHERE price=(SELECT MAX(s2.price)
FROM shop s2
WHERE s1.article = s2.article);
O exemplo anterior usa uma subconsulta correlacionada, que pode ser ineficiente (consulte a Seção 13.2.10.7, “Subconsultas correlacionadas”). Outras possibilidades para resolver o problema são usar uma subconsulta não correlacionada na cláusula FROM ou um LEFT JOIN.
Subconsulta não correlacionada:
SELECT s1.article, dealer, s1.price
FROM shop s1
JOIN (
SELECT article, MAX(price) AS price
FROM shop
GROUP BY article) AS s2
ON s1.article = s2.article AND s1.price = s2.price;
LEFT JOIN:
SELECT s1.article, s1.dealer, s1.price
FROM shop s1
LEFT JOIN shop s2 ON s1.article = s2.article AND s1.price < s2.price
WHERE s2.article IS NULL;
O LEFT JOIN funciona com base em que quando s1.price está em seu valor máximo, não há s2.price com um valor maior e os valores de s2 rows serão NULL.