SQL-запрос для получения лучших «n» баллов из списка - PullRequest
6 голосов
/ 01 сентября 2008

Я бы хотел найти разные способы решения реальной жизненной проблемы: представьте себе, что у вас есть конкурс или игра, во время которой пользователи набирают очки. Вы должны создать запрос, чтобы показать список пользователей с лучшими "n" баллами.

Я делаю пример, чтобы уточнить. Допустим, это таблица «Пользователи» с заработанными баллами:

UserId - Points
1      - 100
2      -  75
3      -  50
4      -  50
5      -  50
6      -  25

Если я хочу получить 3 лучших результата, результат будет:

UserId - Points
1      - 100
2      -  75
3      -  50
4      -  50
5      -  50

Это может быть реализовано в виде или хранимой процедуре, как вы хотите. Моя целевая база данных - Sql Server. На самом деле я решил это, но я думаю, что есть другой способ получить результат ... быстрее или эффективнее, чем мой.

Ответы [ 11 ]

0 голосов
/ 01 сентября 2008

@ bosnic, я не думаю, что это будет работать так, как требуется, я не очень знаком с MS SQL, но я ожидаю, что он вернет только 3 строки, и игнорирую тот факт, что 3 пользователя привязаны к 3-му месту.

Примерно так должно работать:

select userid, points 
   from scores 
   where points in (select top 3 points 
                       from scores 
                       order by points desc) 
   order by points desc
...