В MySQL 8+ вы должны использовать row_number()
:
SELECT ROW_NUMBER() OVER (ORDER BY COUNT(*) DESC) as rank,
h.name, COUNT(*) AS votes
FROM users h LEFT OUTER JOIN
users_votes v
ON h.id = v.hId
GROUP BY h.id
ORDER BY rank ASC;
Переменные устарели в 8 +.
В более ранней версии вы можете использовать переменные, но они склонны не уважать ORDER BY
или GROUP BY
. Итак, с этими конструкциями вам нужен подзапрос:
SELECT (@rn := @rn + 1) as rank, hv.*
FROM (SELECT h.name, COUNT(*) AS votes
FROM users h LEFT OUTER JOIN
users_votes v
ON h.id = v.hId
GROUP BY h.id
ORDER BY rank ASC
) hv CROSS JOIN
(SELECT @rn := 0) params;