Как средствами SQL выбрать из таблицы заданное количество случайных (random) записей?
Выбор случайных записей (SQL)
3
Спросил
Лучший ответ:
4
Похоже что в спецификациях SQL ничего нет про выборку случайных строк из таблицы. Тем не менее большинство движков баз данных поддерживает такую возможность, правда каждый по своему. Идея такая — используется сортировка не по полю, а по некоторому случайному числу, сгенерированному для каждой строки таблицы. Если взять первые n строк такой выборки, то они и будут содержать n случайных строк таблицы. Вот примеры SQL запросов:
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
Примеры взяты из статьи SQL to Select a random row from a database table. Во всех примерах выбирается одна случайная запись, но запросы легко обобщить на случай n записей.
Эти примеры проблему решают, но создают новую. Эта проблема - неэффективность. К сожалению, общей методики борьбы нет. Например, я заранее в скрипте вычислял случайное смещение и после этого делал выборку.
Сразу скажу: этот метод не для всех данных подходит, надо смотреть по задаче.