Каков наилучший способ сортировки результатов запроса sql в случайном порядке в хранимой процедуре?
Случайная сортировка SQL Server
Ответ 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