У меня есть запрос, основанный на ответе на этот вопрос: Обработка связей при ранжировании от самого высокого до самого низкого
Учитывая этот набор данных:
Name | Score
Mike | 5
John | 3
Mary | 3
Matt | 0
Следующий запрос возвращает пользовательский массив, содержащий правильные значения.
User.find_by_sql("SELECT id, score, (SELECT COUNT(DISTINCT outertable.score) + 1
FROM users WHERE score > outertable.score ORDER BY score ASC) AS rank
FROM users as outertable GROUP BY outertable.id, outertable.score
ORDER BY score DESC LIMIT 30")
Name | Score | Rank
Mike | 5 | 1
John | 3 | 2
Mary | 3 | 2
Matt | 0 | 3
При выполнении точно такого же запроса в Postgres на Heroku я получаю эту ошибку:
ActiveRecord::StatementInvalid: PGError: ERROR: more than one row returned by a subquery used as an expression
Добавление LIMIT 1
к внутреннему выбору приводит к следующим интересным данным:
Name | Score | Rank
Mike | 5 | nil
John | 3 | 2
Mary | 3 | 2
Matt | 0 | 2
Спасибо за помощь!