SQL: получить ранг набора данных после сортировки данных - PullRequest
3 голосов
/ 09 января 2012

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

Моим текущим решением было бы сделать SELECT для всех данных при сортировке результата, а затем пройти по списку результатов, чтобы найти требуемый идентификатор, позиция, в которой я нахожу это значение ранжирования, которое я хочу получить.

К сожалению, для больших таблиц это требует много памяти и вычислительного времени. Итак, мой вопрос: есть ли оператор SQL, который возвращает позицию определенного идентификатора после сортировки таблицы?

1 Ответ

5 голосов
/ 09 января 2012

Если вы используете SQL Server 2005 и новее, вы можете использовать оконные функции RANK() или DENSE_RANK():

SELECT
   (your list of columns here),
   RANK() OVER(ORDER BY yourcolumnnamehere)
FROM dbo.YourTable

или:

SELECT
   (your list of columns here),
   DENSE_RANK() OVER(ORDER BY yourcolumnnamehere)
FROM dbo.YourTable

См. объяснение различия между RANK и DENSE_RANK здесь

Другие СУБД (например, Oracle) также, похоже, поддерживают эти оконные функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...