Android Sqlite: есть ли способ контролировать количество дубликатов столбцов, которые вы получаете в одном запросе? - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть таблица книг, когда каждая книга содержит тег и имя. Теперь я хочу получить 10 разных книг для каждого тега. Я думал об использовании различных или групп, но это удаляет все дубликаты. Кто-нибудь знает способ контроля количества дубликатов?

ID   NAME   TAG
-----------------------
1    GREEN  adventures
2    RED    adventures
3    YELLOW love
4    BLACK  adventures
5    WHITE  love
6    PURPLE Fantasy

Результаты для 2 копий одного и того же тега:

ID   NAME   TAG
-----------------------
1    GREEN  adventures
3    YELLOW love
4    BLACK  adventures
5    WHITE  love
6    PURPLE Fantasy

1 Ответ

0 голосов
/ 10 апреля 2020

С 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 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...