Алгоритм сортировки SQL - PullRequest
       2

Алгоритм сортировки SQL

2 голосов
/ 22 февраля 2011

У меня есть следующая таблица:

| WinnerID | LoserID |

В ней описывается результат матча двух участников.В настоящее время у меня есть следующий запрос для создания высокой оценки:

SELECT WinnerID 
FROM KomperResult 
GROUP BY WinnerID 
ORDER BY COUNT(LoserID) DESC LIMIT 10;

Если бы результаты были:

| WinnerID | LoserID |
     1          2
     1          3
     4          1

Высокая оценка будет:

 1
 4

Но я хочу, чтобы это было:

 4
 1

Каким был бы лучший алгоритм / запрос для генерации высокой оценки?

Ответы [ 2 ]

2 голосов
/ 22 февраля 2011

Из ваших сообщений и комментариев видно, что вы пытаетесь создать систему ранжирования на основе результатов индивидуального соревнования. Для простых сценариев, таких как описанный вами, может быть возможно создать запрос, который будет возвращать ожидаемые результаты. Однако по мере того, как вы получаете больше результатов с большим количеством пользователей, количество различных сценариев и требуемых расчетов может стать более сложным.

Возможно, было бы полезно взглянуть на систему ранжирования Эло , используемую шахматами для создания рейтинга между людьми в соревнованиях один на один. Вот сайт, который дает довольно хороший пример того, как работают расчеты: Elo Введение (объяснено как используется для турниров по Го).

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

1 голос
/ 22 февраля 2011

Ну, почему бы тогда не отсортировать это по-другому?

SELECT WinnerID 
FROM KomperResult 
GROUP BY WinnerID 
ORDER BY COUNT(LoserID) ASC LIMIT 10;

Не подтверждено, хотя

Дело в том, что вы сортируете по LoserID, но вам нужен только WinnerID. Если вы точно знаете, что хотите, данные могут иметь смысл, но для меня это не самый лучший способ.

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