Когда мне нужно было сделать что-то похожее, я создал вид, который выглядел так:
CREATE VIEW rankings_view
AS
SELECT id
, point
, (select count(1)
from points b
where b.point > a.point) +1 as rank
FROM points as a;
Предполагается, что исходная таблица называлась точками, очевидно. Затем вы можете получить ранг любого идентификатора или идентификатор, соответствующий любому рангу, запросив представление.
РЕДАКТИРОВАТЬ
Если вы хотите посчитать количество отдельных значений точек над каждым значением точки вместо количества записей с значениями точек выше текущего значения точки, вы можете сделать что-то вроде:
CREATE VIEW rankings_view2
AS
SELECT id
, point
, (SELECT COUNT(1) +1 AS rank
FROM ( SELECT DISTINCT point
FROM points b
WHERE b.point >a.point ))
FROM points AS a;
Примечание
Некоторые из представленных решений определенно работают лучше, чем это. Они специфичны для mysql, поэтому я не могу использовать их для того, что я делаю. Мое приложение имеет не более 128 объектов для ранжирования, поэтому для меня это достаточно хорошо. Однако, если у вас может быть множество строк, вы можете захотеть использовать одно из других решений, представленных здесь, или ограничить область ранжирования.