Узнать позицию в сортировке ORDER BY в mysql

У меня есть таблица, где подсчитаваются статистики игроков. Сейчас вывожу топ игроков всем

SELECT user, event_stat FROM stats ORDER BY event_stat DESC LIMIT 9;'

Но хочу последней строчкой выводить игроку ЕГО место в статистике. Для этого мне нужно узнать на каком месте был бы игрок если бы я запросил сразу все строки ORDER BY event_stat DESC

Есть возможность узнать номер строки конкретного юзера запросом? Не хочу делать так: SELECT count(*) FROM stats where event_stat > $usersEventStat; т.к. у игроков может быть одинаковый показатель 'event_stat' (тогда место будет зависеть от id строки в базе) и место в топе будет указано не точно.


Ответы (1 шт):

Автор решения: Den

Для того чтобы получить номер строки конкретного пользователя в результатах запроса, можно использовать выражение ROW_NUMBER() в качестве параметра функции SELECT.

Например, для получения полной таблицы статистики, отсортированной по убыванию показателя event_stat, и добавления столбца с номером строки для каждого пользователя, можно использовать следующий запрос:

SELECT
  user,
  event_stat,
  ROW_NUMBER() OVER (ORDER BY event_stat DESC) as row_number
FROM stats

Этот запрос вернет таблицу со столбцами user, event_stat и row_number, где row_number будет хранить номер строки для каждого пользователя. Например, если пользователь с наибольшим значением event_stat находится в первой строке таблицы, то его значение row_number будет равно 1.

→ Ссылка