PostgreSQL рандомный элемент

Есть таблица PostgeSQL со словами

введите сюда описание изображения

Мне надо вернуть одно рандомное слово из этой таблицы.

Вот код сервера: введите сюда описание изображения


Ответы (2 шт):

Автор решения: Artem Berezovski
  1. Как предложил @learp сгенерить на сервере рандомный id и подставить его в запрос
  2. В самом запросе с помощью конструкции with:
    with rands(rand) as (
        values (floor(random() * (7 - 3)) + 3)
    )
    select id, word from t, rands where id = rand;
    
→ Ссылка
Автор решения: Andrew Bystrov

Если вы боитесь разрывов, то можно переписать чутка запрос из ответа выше, используя функцию ROW_NUMBER.

суть запроса - мы для каждой строки в базе проставляем row_number, берем рандомное значение между 1 и количеством строк и выводим это значение.

Примерно выгляд так

with data_size as (
    select count(*) from t
),
with rands as (
    values( floor(random() * data_size.count ))
)
select id, word, row_number over(order by id) as rn
from table
where rn = rands

p.s. запрос может быть синтаксически невалиден, но демонстрирует нужную логику

→ Ссылка