Узнать позицию в сортировке 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 шт):
Для того чтобы получить номер строки конкретного пользователя в результатах запроса, можно использовать выражение 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.