Подтвердить что ты не робот

Случайная сортировка SQL Server

Каков наилучший способ сортировки результатов запроса sql в случайном порядке в хранимой процедуре?

4b9b3361

Ответ 1

Это дубликат SO # 19412. Вот ответ, который я дал там:

select top 1 * from mytable order by newid()

В SQL Server 2005 и выше вы можете использовать TABLESAMPLE для получения повторяемой случайной выборки:

SELECT FirstName, LastName FROM Contact TABLESAMPLE (1 ROWS) ;

Ответ 2

select foo from Bar order by newid()

Ответ 3

Или используйте следующий запрос, который возвращает лучший результат случайной выборки:

SELECT * FROM a_table WHERE 0.01 >= CAST(CHECKSUM(NEWID(), a_column) & 0x7fffffff AS float) / CAST (0x7fffffff AS int)

0.01 означает ~ 1% от общего количества строк.

Цитата из электронной документации по SQL 2008:

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

Ответ 4

Вы не можете просто ORDER BY RAND(), как вы знаете, потому что он будет генерировать только одно значение. Поэтому используйте ключ для начального значения.

SELECT RAND(object_id), object_id, name
  FROM sys.objects
 ORDER BY 1