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

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

возможный дубликат Как запросить случайную строку в SQL?

exhuma 11.08.2014 17:39
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
49
1
51 392
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

select foo from Bar order by newid()

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

SELECT RAND(object_id), object_id, name
  FROM sys.objects
 ORDER BY 1
Ответ принят как подходящий

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

select top 1 * from mytable order by newid()

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

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

Хотя это не лучший ответ согласно другому вопросу, связанному с: stackoverflow.com/questions/19412/…

Doug S 09.11.2012 00:49

Этот вопрос не является точной копией SO # 19412, который запрашивает случайную строку из запроса, даже если он отмечен как ответ, поскольку это дает только 1 строку, а не результаты запроса, отсортированные случайным образом.

Chad Miller 11.09.2015 20:09

Наконечник TABLESAMPLE золотой!

Kong 15.06.2016 08:39

Фактически, это вообще не отвечает на вопрос как просили. Поскольку спрашивающий отметил это как лучший ответ, похоже, что у него возникли проблемы с формулировкой своего фактического вопроса, но это не меняет того факта, что заданный вопрос: «Как мне случайным образом отсортировать все строк, возвращаемых моим запросом. ", в то время как в этом ответе говорится" вот как вернуть одну случайную строку из таблицы ".

Martha 22.08.2018 18:24

TABLESAMPLE работает только для локальной таблицы. Для общего запроса вам придется полагаться на другую конструкцию.

Fabian Pijcke 17.04.2020 17:12

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

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

0,01 означает ~ 1 процент от общего числа строк.

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

If you really want a random sample of individual rows, modify your query to filter out rows randomly, instead of using TABLESAMPLE.

Это работает медленнее, чем TABLESAMPLE, и быстрее, чем ORDER BY NEWID () для большой таблицы.

endo64 15.10.2010 17:13

Поскольку я искал случайную выборку из результатов запроса, это конкретное решение дало мне то, что я искал, хотя ответ Харпо упорядочивал результаты случайным образом.

Chad Miller 11.09.2015 20:15

Другие вопросы по теме