Я использую MSSQL Server 2005. В моей БД у меня есть таблица "customerNames", которая имеет два столбца "Id" и "Name" и ок. 1000 результатов.
Я создаю функциональность, где мне приходится каждый раз выбирать 5 клиентов случайным образом. Может кто-нибудь сказать мне, как создать запрос, который будет получать случайные 5 строк (Id и Name) каждый раз, когда запрос выполняется?
Ответы:
Тем не менее, все, кажется, приходят на эту страницу для более общего ответа на ваш вопрос:
Выбор случайной строки в SQL
Выберите случайную строку с MySQL:
Выберите случайную строку с PostgreSQL:
Выберите случайную строку с Microsoft SQL Server:
Выберите случайную строку с IBM DB2
Выберите случайную запись с Oracle:
Выберите случайную строку с помощью sqlite:
источник
update tbl_vouchers set tbl_UsersID = (select top(1) id from tbl_Users order by NEWID())
- edit: я не могу получить форматирование для работы в комментариях :(источник
В случае, если кто-то хочет решение PostgreSQL:
источник
Может быть, этот сайт будет полезным.
Для тех, кто не хочет переходить по ссылке:
источник
Здесь есть отличное решение для Microsoft SQL Server 2005. Решает проблему, когда вы работаете с большим набором результатов (не вопрос, который я знаю).
Выбор строк случайным образом из большой таблицы http://msdn.microsoft.com/en-us/library/cc441928.aspx
источник
Если у вас есть таблица с миллионами строк и вы заботитесь о производительности, это может быть лучшим ответом:
https://msdn.microsoft.com/en-us/library/cc441928.aspx
источник
Это старый вопрос, но попытка применить новое поле (NEWID () или ORDER BY rand ()) к таблице с большим количеством строк будет чрезмерно дорогой. Если у вас есть инкрементные уникальные идентификаторы (и у вас нет дыр), будет более эффективно вычислять X # идентификаторов, которые будут выбраны, вместо применения GUID или аналогичного для каждой отдельной строки, а затем с использованием верхнего X #.
Если вы хотите выбрать еще много строк, я бы посмотрел на заполнение таблицы #tempTable с идентификатором и набором значений rand (), а затем использовал бы каждое значение rand () для масштабирования до минимальных и максимальных значений. Таким образом, вам не нужно определять все параметры @ randomId1 ... n. Ниже приведен пример использования CTE для заполнения начальной таблицы.
источник
источник
Я нашел, что это работает лучше всего для больших данных.
TABLESAMPLE(n ROWS) or TABLESAMPLE(n PERCENT)
является случайным, но нужно добавить,TOP n
чтобы получить правильный размер выборки.Использование
NEWID()
очень медленно на больших столах.источник
Как я объяснил в этой статье , чтобы перетасовать набор результатов SQL, вам нужно использовать вызов функции для конкретной базы данных.
Итак, предположим, что у нас есть следующая таблица базы данных:
И следующие строки в
song
таблице:оракул
В Oracle вам нужно использовать
DBMS_RANDOM.VALUE
функцию, как показано в следующем примере:При выполнении вышеупомянутого SQL-запроса в Oracle мы получим следующий набор результатов:
SQL Server
На SQL Server вам необходимо использовать
NEWID
функцию, как показано в следующем примере:При выполнении вышеупомянутого SQL-запроса на SQL Server мы получим следующий набор результатов:
PostgreSQL
В PostgreSQL вам необходимо использовать
random
функцию, как показано в следующем примере:При выполнении вышеупомянутого SQL-запроса на PostgreSQL мы получим следующий набор результатов:
MySQL
В MySQL вам необходимо использовать
RAND
функцию, как показано в следующем примере:При выполнении вышеупомянутого SQL-запроса на MySQL мы собираемся получить следующий набор результатов:
источник
Если вы используете большую таблицу и хотите получить доступ к 10 процентам данных, выполните следующую команду:
SELECT TOP 10 PERCENT * FROM Table1 ORDER BY NEWID();
источник