MySQL не имеет поддержки аналитических функций (ROW_NUMBER, RANK, DENSE_RANK), которая обычно используется для таких требований.
Использование:
SELECT @rownum := @rownum + 1 AS ranking
FROM YOUR_TABLE t
JOIN (SELECT @rownum := 0) r
ORDER BY t.value
Пример:
SELECT x.num,
@rownum := @rownum + 1 AS ranking
FROM (SELECT 30 AS num
UNION ALL
SELECT 85
UNION ALL
SELECT 90) x
JOIN (SELECT @rownum := 0) r
ORDER BY x.num
Вы можете использовать:
SELECT (SELECT COUNT(*)
FROM YOUR_TABLE b
WHERE b.value <= a.value) AS ranking
FROM YOUR_TABLE a
... но дубликаты будут иметь одинаковое значение ранжирования. И вы должны убедиться, что сравнение значений выполняется в правильном направлении.