SQL Server Случайная сортировка - PullRequest
42 голосов
/ 10 сентября 2008

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

Ответы [ 4 ]

66 голосов
/ 10 сентября 2008

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

select top 1 * from mytable order by newid()

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

SELECT FirstName, LastName FROM Contact TABLESAMPLE (1 ROWS) ;
18 голосов
/ 10 сентября 2008
select foo from Bar order by newid()
7 голосов
/ 15 октября 2010

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

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 голосов
/ 10 сентября 2008

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

SELECT RAND(object_id), object_id, name
  FROM sys.objects
 ORDER BY 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...