SELECT id, authorId, answer, votes
FROM ( SELECT id, authorId, answer, votes
FROM answers
ORDER BY votes DESC) AS h
GROUP BY authorId
Cette petite astuce est construite en se basant sur GROUP BY
pour récupérer la première ligne de chaque cas. Habituellement c'est par défaut ORDER BY id ASC
, mais via cette sous-requête, la première ligne de chaque authorId
avec le plus grand nombre de votes
.
Remarque : Comme mentionné par Iain Elder, cette solution ne fonctionne pas avec ONLY_FULL_GROUP_BY
actif et ne fonctionne que dans MySQL. Cette solution est dans une certaine mesure non prise en charge en raison du manque de documentation confirmant ce comportement. Cela fonctionne bien pour moi et a toujours bien fonctionné pour moi cependant.
Cette méthode fonctionne toujours sur le dernier MySQL sur sqlfiddle .