Оптимизация запроса SQL Rank - PullRequest
0 голосов
/ 29 апреля 2010

У меня есть следующая структура таблицы для таблицы Player

Table Player {  
Long playerID;  
Long points;  
Long rank;  
}

Если предположить, что идентификатор игрока и очки имеют действительные значения, могу ли я обновить рейтинг для всех игроков на основе количества очков в одном запросе? Если два человека имеют одинаковое количество очков, они должны связать за ранг.

Я использую hibernate, поэтому не могу выполнять какие-либо запросы с переменными, поэтому я пришел к этому запросу, который очень неэффективен. Может ли это быть оптимизировано для работы с ограничениями, указанными выше?

update player g1 
    set g1.rank = 1 + 
    ((SELECT count(*) from 
    (select * from player) g2 
    where g2.points > g1.points))

Ответы [ 2 ]

1 голос
/ 09 июня 2011

Если вы используете MS SQL Server 2005+ T-SQL, я могу порекомендовать вам посмотреть на фантастические функции ROW_NUMBER (), RANK () AND DENSE_RANK () и NTILE () ! 1003 *

Подробнее о них читайте здесь

0 голосов
/ 22 мая 2018

В SQL Server есть четыре функции ранжирования. ROW_NUMBER, RANK, DENSE_RANK и NTILE используются для возврата значения ранжирования для каждой строки в разделе.

Для различия между ними с примером проверьте URL, указанный ниже

http://www.freshcodehub.com/Article/50/implement-ranking-functions-in-sql-server

...