Получить текущий рейтинг с помощью mysql

у меня есть этот запрос, чтобы получить ранг строк, упорядочить по некоторому полю

SET @rank=0;
SELECT @rank:=@rank+1 AS rank, id, ammopacks
  FROM users
  GROUP BY id
  ORDER BY ammopacks DESC;

Как насчет того, чтобы получить ранг идентификатора «x», не ранжируя их все раньше? Я не хочу знать ранг всех пользователей, только один идентификатор.

Является ли это возможным?

заранее спасибо


person Zuker    schedule 08.05.2013    source источник


Ответы (1)


Вы можете сделать это с помощью подзапроса:

select count(*) as rank
from users u
where u.ammopacks >= (select ammopacks from users u2 where u2.id = x)

Это не совсем то же самое. Это сделает реальный рейтинг, где пользователи с одинаковым значением ammopacks будут иметь одинаковый рейтинг. В этом случае оригинал давал бы разным пользователям разные последовательные значения.

Чтобы получить этот эффект, вы можете сделать:

select count(*) as rank
from users u
where u.ammopacks > (select ammopacks from users u2 where u2.id = x) or
      (u.ammopacks = (select ammopacks from users u2 where u2.id = x) and
       u.id <= x
      )
person Gordon Linoff    schedule 08.05.2013
comment
Используя 2-й запрос, я получаю количество строк, а не место в рейтинге... - person Zuker; 11.05.2013