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

Скрипты, запросы.

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

Сообщение invisib1e » 10 апр 2011, 04:30

В данном примере я рассматриваю 10 случайных записей из заданной таблицы следующим образом:

Код: Выделить всё
SELECT TOP 10 column_name
FROM table
ORDER BY NEWID()
invisib1e
The Admin
 
Сообщения: 55
Зарегистрирован: 16 мар 2010, 22:28
Откуда: Russia, Moscow
Благодарил (а): 1 раз.
Поблагодарили: 2 раз.

Re: Как одним SQL-запросом выбрать случайные записи из табли

Сообщение UKsystem » 10 апр 2011, 23:06

а точно ли TOP 10 каждый раз будет возвращать истенно рандомные строки ? А не просто 10 самых верхних ?

а это что озачает
Код: Выделить всё
ORDER BY NEWID()
?
Я занаю, что можно ASC, DESC. А это что
Код: Выделить всё
...NEWID()
?
Антивирусы. SaaS. Купить антивирус для дома и для офиса
Заправка картриджей, ремонт принтеров для дома и для офиса
UKsystem
Администратор
 
Сообщения: 363
Зарегистрирован: 11 мар 2010, 22:56
Благодарил (а): 0 раз.
Поблагодарили: 6 раз.

Re: Как одним SQL-запросом выбрать случайные записи из табли

Сообщение invisib1e » 11 апр 2011, 01:17

а точно ли TOP 10 каждый раз будет возвращать истенно рандомные строки ? А не просто 10 самых верхних ?

Значение TOP 10 в данной ситуации как и везде выводит именно первые 10 строк, как ты и написал - верно!
А вот за рандомные значения как раз и отвечает NEWID(), что является (UniqueIdentifier), в других же приложениях, как Oracle, MySQL данную функцию могут заменять RANDOM(), RAND() или как я столкнулся сегодня в Access это был RND().
Как можно реализовать в MySQL:
Код: Выделить всё
SELECT coloumn_name
FROM table
ORDER BY RAND() LIMIT 10

Схему его работы я представляю себе следующим образом:
1) ORDER BY NEWID() - Присваивает случайный уникальный номер и сортирует по нему выбранный(-ые) столбец(-ы).
2) А уж TOP 10 просто выбирает первые 10 отсортированных.

Т.е. если мы составляем скрипт таким образом:
Код: Выделить всё
SELECT TOP 5 id_test, NEWID()
FROM table
ORDER BY NEWID()

То увидим эти уникальные номера, а сортирует он их по данным, что выделено красным:

id_test NEWID()
211588 7DCB8F8D-4D83-4A4C-95F3-0000CB5F8E3F
144160 FF6B79FB-F2F8-4293-9E03-00013CBDB805
108347 A0391B09-F386-4641-8DFA-00015606EC05
147080 4A5AF5E5-C119-48A9-AAE3-00015C0B1369
179950 B7A1CEE3-BFA8-4B27-9E16-0003051F59CF

Повторное выполнение скрипта соответственно выдает совершенно другие значения, метод 100% рабочий! 8-)
invisib1e
The Admin
 
Сообщения: 55
Зарегистрирован: 16 мар 2010, 22:28
Откуда: Russia, Moscow
Благодарил (а): 1 раз.
Поблагодарили: 2 раз.


Вернуться в Transact-SQL

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron