Ответы пользователя по тегу PostgreSQL
  • Как сформировать рандомную выборку товаров с присутствием минимум 1 товара определенной группы?

    Trixon
    @Trixon
    Суровый ASP.NET веб-разработчик
    Держите:

    SELECT *
    FROM public.bazaar_items
    WHERE charity IS TRUE
    UNION
    SELECT *
    FROM public.bazaar_items
    OFFSET (random()*B) LIMIT R;

    Где B -- константа, целое число, 1 <= B <= MAX - R.

    Однако я бы на Вашем месте не стал лишний раз задействовать вычислительные ресурсы сервера СУБД вызывая на нём random(), а отдал бы это на растерзание бэкенду, переписав последнюю строчку запроса как:

    OFFSET (F) LIMIT R;

    Где F -- целое число, генерирующееся в диапазоне 1 <= F <= MAX - R на бэкенде.

    MAX -- максимальное количество товаров.
    R -- максимальное количество выводимых товаров (в Вашем случае 4).

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