swanrnd
@swanrnd
Издатель HTML5 игр

Топ игроков. Как вывести место конкретного игрока?

Есть MS SQL и такая таблица, показан фрагмент:
id (уникальный ключ)
score (индекс по score DESC)

Для получение топа выполняет 2 запроса:
SELECT TOP 100 id, score FROM table ORDER BY score DESC;
SELECT score FROM table WHERE id=@id;

Но во втором запросе надо получить не только количество очков игрока, но и его место.
Как это сделать максимально оптимизировано?
Кстати? топов много, по разным параметрам. Так что кластер индекс тут не поможет.
В таблице пару сотен тысяч записей.
  • Вопрос задан
  • 3302 просмотра
Решения вопроса 1
@kfuntov
SELECT score,
       (SELECT COUNT(*)
          FROM table AS p
         WHERE p.score <= t.score) AS position
 FROM table AS t WHERE id=@id;


По мотивам stackoverflow.com/questions/3614666/mysql-get-row-...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы