Упорядочить по первым результатам, которые не превышают go - PullRequest
0 голосов
/ 31 марта 2020

Как можно упорядочить по двум полям, если значение не больше другого? Вот пример того, что я написал.

SELECT * 
  FROM contest_results r
  LEFT 
  JOIN participant_users u
    ON r.participant_id = u.id
  LEFT 
  JOIN contest_entry_tie_answers t
    ON u.id = t.participant_id
  LEFT 
  JOIN contest_answers a
    ON a.question_id = t.tie_breaker_question_id
 WHERE r.contest_id = 20
 ORDER BY r.correct_answers DESC,
 t.answer <= a.possible_answer ASC

Теперь представьте, что этот запрос возвращает две строки, а contest_entry_tie_answers. answer имеет значение 103, а другую - 106. Наконец, представьте, что contest_answers. possible_answer имеет значение 105, потому что это поле было проверено как правильный ответ. Я хочу иметь возможность заказать результаты как contest_entry_tie_answers. answer <= <code>contest_answers. possible_answer.

Это будет означать, что ответ 103 будет показан первым в том случае, если предыдущий порядок на contest_results. correct_answers возвращает значение ie для обоих. Тогда результат 106 будет показываться последним, потому что он прошел реальный правильный ответ 105.

Есть ли способ сделать это? Надеюсь, в этом был какой-то смысл.

1 Ответ

0 голосов
/ 01 апреля 2020

Полагаю, что я нашел решение, выполнив следующее:

SELECT * 
  FROM contest_results r
  LEFT 
  JOIN participant_users u
    ON r.participant_id = u.id
  LEFT 
  JOIN contest_entry_tie_answers t
    ON u.id = t.participant_id
  LEFT 
  JOIN contest_answers a
    ON a.question_id = t.tie_breaker_question_id
 WHERE r.contest_id = 20
 ORDER BY r.correct_answers DESC,
 case 
     when t.answer <= a.possible_answer then 0 
     when t.answer > a.possible_answer then 1
 end,
 t.answer
 DESC

Кажется, это хорошо работает после моего начального тестирования.

...