PostgreSQL рандомный элемент
Есть таблица PostgeSQL со словами
Мне надо вернуть одно рандомное слово из этой таблицы.
Ответы (2 шт):
Автор решения: Artem Berezovski
→ Ссылка
- Как предложил @learp сгенерить на сервере рандомный id и подставить его в запрос
- В самом запросе с помощью конструкции
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. запрос может быть синтаксически невалиден, но демонстрирует нужную логику

