С ROW_NUMBER()
оконной функцией:
select b.id, b.name, b.tag
from (
select *, row_number() over (partition by tag order by random()) rn
from books
) b
where b.rn <= 10
Это вернет 10 случайных книг для каждого тега. Если вы хотите 10 первых книг по id
, измените:
order by random()
на:
order by id
См. демо . Или для более старых версий SQLite, которые не поддерживают оконные функции:
select b.id, b.name, b.tag
from (
select b.*, (select count(*) from books where tag = b.tag and id <= b.id) rn
from books b
) b
where b.rn <= 10
См. demo .