@manavalit

Как получить номер строки + отсортированной по одной колонке?

Я пишу телеграмм бота по типу викторины. У меня есть таблица PostgreSQL в которой есть id (SERIAL), user_id пользователя телеграмм, количество ответов всего, правильных и неправильных. Мне нужно показать пользователю его место в общем списке по количеству правильных ответов. Но я не знаю как это реализовать. Я пробовал делать запрос вот такого типа:
SELECT user_id, row_number() OVER(ORDER BY right DESC) as number FROM users

Но он выдает всю таблицу, а мне нужно только по одному пользователю. Также я пробовал делать вот так:
SELECT user_id, row_number() OVER(ORDER BY right DESC) as number FROM users WHERE user_id=%s

Но он всегда выдает число 1, потому что ищет количество правильных ответов только по этому юзеру.
Получается, надо сначала отсортировать таблицу и пронумировать её, а потом получить номер строки в которой user_id=%s
Не подскажите как это реализовать?
  • Вопрос задан
  • 532 просмотра
Решения вопроса 1
@d-stream
Готовые решения - не подаю, но...
Упрощенно:
select * from (select ..... ) as abc where abc.user=xxx

то есть внутренний запрос "пронумерует" данные как надо, а внешний из этого пронумерованного выберет только нужные позиции.

p.s. а вообще "место пользователя" - больше напрашивается RANK()
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы