Выбор случайных записей (SQL)

17.03.2012

Средствами «чистого» SQL нет возможности выбрать из таблицы заданное количество случайных (random) записей.

Вот примеры решения для разных движков:

MySql
SELECT column FROM table
ORDER BY RAND()
LIMIT 1

PostgreSQL:
SELECT column FROM table
ORDER BY RANDOM()
LIMIT 1

Microsoft SQL Server:
SELECT TOP 1 column FROM table
ORDER BY NEWID()

IBM DB2:
SELECT column, RAND() as IDX 
FROM table 
ORDER BY IDX FETCH FIRST 1 ROWS ONLY

Oracle:
SELECT column FROM
( SELECT column FROM table
ORDER BY dbms_random.value )
WHERE rownum = 1

Хочу отметить, что у всех этих решений есть один общений недостаток – неэффективность.
Решением может послужить предварительная подготовка случайно распределенного списка id, а затем подстановка его в запрос.


Категории: SQL
Яндекс.Метрика