И так, есть две таблицы следующего содержания
Таблица 1 (books)
|book_id|ctr|
Таблица 2 (book_stats)
|book_id|lang|category|ctr|
В таблице 1 изначальные данные присутствуют, в вторую таблицу пишутся данные в зависимости от языка браузера + категории страницы. суть в раздельном подсчете ctr для разных языков и страниц категорий.
select book_id, ctr from book_stats
where lang = 'ru' and category = 'horror'
order by ctr desc
limit 200;
Но, в таблице 2 у меня только 20 записей например, под данный lang, categories.
А мне нужно вывести 200 записей, далее делаю так, остатки 180 записей беру в таблице 1
select book_id, ctr
from books
where book_id not in (
select book_id from book_stats
where lang = 'ru' and category = 'horror'
order by ctr desc
limit 200;
)
order by ctr desc
limit 120
оба эти запроса объединяю union all, и вроде все работает.
Но как сделать так, что-бы во втором запросе limit был вычисляем в зависимости от результата первого запроса?
что бы если первый вернул N<200, второй брал 200-N результатов, а если в первом запросе есть 200 записей, то второй вообще не выполнять?
Вроде написал процедуру, но запутался в типах , кто подскажет как правильно реализовать, очень желательно в хранимой процедуре pl/pgsql.
Спасибо!