запрос, который возвращает 10 значений со сложным условием - PullRequest
0 голосов
/ 19 мая 2018

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

У меня есть таблица tbl с двумя столбцами: movie_id, Rank (INTEGER), (LIKE \ DISLIKE \ NULL)

Мне нужно написать запрос, который возвращает топ-10 фильмов, которые имеютнаибольшее количество НРАВИТСЯ.(Если равенство лайков, их нужно упорядочить по Ascending movie_id)

Крайние случаи: Если менее 10 фильмов имеют ранг = 'LIKE' (скажем, естьтолько 7) тогда мне нужно вернуть те 7 movie_id, упорядоченные по количеству лайков и , еще 3 movie_id, упорядоченные по movie_id (не имеет значения, есть ли «DISLIKE» или NULL в значении Rank)

Если на столе нет 10 фильмов, то мне нужно вернуть фильмы, которые находятся в таблице (аналогично тому, как это было объяснено ранее, то есть сначала мне нужно вернуть фильмы, заказанныеколичество 'LIKES', а затем остальные, заказанные movie_id)

Может кто-нибудь помочь мне с этим?

Спасибо!

1 Ответ

0 голосов
/ 19 мая 2018

Я думаю, что это то, что вы описываете:

select t.*
from tbl t
order by ( (ranktype = 'like')::int ) desc,
         rank desc
fetch first 10 rows only;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...