#sql #postgresql #postgresql-10
#sql #postgresql #postgresql-10
Вопрос:
У меня есть таблица элементов:
id | name | is_featured
1 name1 false
Элементы из этой таблицы, которые мне нужны, чтобы показать их случайным образом, но is_featured первым. Правила следующие:
- Если количество
is_featured=True
> 6, получитьis_featured=True
все и рандомизировать и получить первые 6 - Если количество
is_featured=True
< 6, получитьis_featured=True
все и случайным образом подсчитать, сколько пропущено до 6. Получить из неустановленных случайных оставшихся элементов.Объединение списков.
Я делаю это за 2-3 шага в базе данных:
- сначала подсчитайте количество отображаемых
- сначала получить список, затем получить остальные, если это необходимо, и рандомизировать (в бэкэнде)
Это можно сделать за один шаг, в базе данных?
Ответ №1:
Кажется, вам нужно шесть строк с is_featured
первой. Вы можете сделать это за один шаг:
select i.*
from items i
order by i.is_featured desc, -- true is first
random()
fetch first 6 rows only;
То есть сначала отсортируйте все данные is_featured
. Затем выберите первые шесть.