Сортировать таблицу по значению
Есть БД, добавленная через студию (Microsoft SQL Server 13.00.4001), в ней есть юзеры с полем score. Могу ли я в параметрах создания таблицы задать сортировку строк по значению score с записью места в поле этой строки, что бы при получении конкретного юзера, знать его место в рейтинге?
Или это можно организовать только через сортировку в коде, получая все строки таблицы?
Ответы (1 шт):
С точки зрения реляционной алгебры все строки в таблице равнозначны, они не имеют порядка. Даже в справке по MS SQL написано, что запрос вида SELECT * FROM table_name без ORDER BY выполненный несколько раз подряд может вернуть строки в разном порядке.
Чтобы знать место пользователя в рейтинге есть два принципиальных варианта:
Выбрать всех юзеров у кого рейтинг не ниже чем у запрошенного, отсортировать, применить ранжирующую функцию, например
ROW_NUMBERилиDENSE_RANK(в зависимости от того, будет ли одно общее место при равномscore), и выбрать из результата одну интересующую строку. Это делается одним SQL-запросом с подзапросом SELECT FROM SELECT.Создать столбец с местом в рейтинге и пересчитывать его на триггерах после
- Добавления нового юзера
- Удаления юзера
- Изменения
scoreлюбого юзера