Сортировать таблицу по значению

Есть БД, добавленная через студию (Microsoft SQL Server 13.00.4001), в ней есть юзеры с полем score. Могу ли я в параметрах создания таблицы задать сортировку строк по значению score с записью места в поле этой строки, что бы при получении конкретного юзера, знать его место в рейтинге?

Или это можно организовать только через сортировку в коде, получая все строки таблицы?


Ответы (1 шт):

Автор решения: Герман Борисов

С точки зрения реляционной алгебры все строки в таблице равнозначны, они не имеют порядка. Даже в справке по MS SQL написано, что запрос вида SELECT * FROM table_name без ORDER BY выполненный несколько раз подряд может вернуть строки в разном порядке.

Чтобы знать место пользователя в рейтинге есть два принципиальных варианта:

  1. Выбрать всех юзеров у кого рейтинг не ниже чем у запрошенного, отсортировать, применить ранжирующую функцию, например ROW_NUMBER или DENSE_RANK (в зависимости от того, будет ли одно общее место при равном score), и выбрать из результата одну интересующую строку. Это делается одним SQL-запросом с подзапросом SELECT FROM SELECT.

  2. Создать столбец с местом в рейтинге и пересчитывать его на триггерах после

    1. Добавления нового юзера
    2. Удаления юзера
    3. Изменения score любого юзера
→ Ссылка