Запрос подзапроса - PullRequest
       3

Запрос подзапроса

1 голос
/ 16 октября 2010

Мне нужно отобразить рейтинг пользователя, для которого я планирую использовать функцию Rank () в SQL Server.Запрос Sql для получения ранга выглядит следующим образом:

select a.user_id, RANK() OVER (ORDER BY (a.quant_points) DESC) AS QRANK,
    RANK() OVER (ORDER BY (a.verbal_points) DESC) AS VRANK,
    RANK() OVER (ORDER BY (a.dilr_points) DESC) AS DRANK,
    RANK() OVER (ORDER BY (a.quant_points+a.verbal_points+a.dilr_points) DESC) AS ORANK
 from users a

Однако я хочу получить рейтинг только определенного пользователя.Если я добавлю предложение where (где user_id = @user_id) к вышеупомянутому, тогда все ранги будут показаны как 1.

Так что, по сути, я должен запросить вышеуказанный набор результатов, рассматривая его как таблицу.Я думал о создании временной таблицы, но чувствовал, что могли бы быть лучшие способы достигнуть этого.

1 Ответ

3 голосов
/ 16 октября 2010

Как насчет создания CTE и извлечения вашего единственного пользователя?

;with  UserRank AS
( 
    SELECT a.user_id, RANK() OVER (ORDER BY (a.quant_points) DESC) AS QRANK,
           RANK() OVER (ORDER BY (a.verbal_points) DESC) AS VRANK,
           RANK() OVER (ORDER BY (a.dilr_points) DESC) AS DRANK,
           RANK() OVER (ORDER BY (a.quant_points+a.verbal_points+a.dilr_points) DESC) AS ORANK
   FROM Users a
 )

 SELECT QRANK, VRANK, DRANK, ORANK, user_id
 FROM UserRank WHERE user_id = @foo
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...