Как я объяснил в этой статье , чтобы перетасовать набор результатов SQL, вам нужно использовать вызов функции для конкретной базы данных.
Обратите внимание, что сортировка большого набора результатов с использованием функции RANDOM может оказаться очень медленной, поэтому убедитесь, что вы делаете это на небольших наборах результатов.
Если у вас есть перетасовать большой набор результатов и ограничить его позже, то лучше использовать что - то вроде OracleSAMPLE(N)
или TABLESAMPLE
в SQL Server или PostgreSQL вместо случайной функции в ORDER BY предложения.
Итак, предположим, что у нас есть следующая таблица базы данных:
И следующие строки в song
таблице:
| id | artist | title |
|----|---------------------------------|------------------------------------|
| 1 | Miyagi & Эндшпиль ft. Рем Дигга | I Got Love |
| 2 | HAIM | Don't Save Me (Cyril Hahn Remix) |
| 3 | 2Pac ft. DMX | Rise Of A Champion (GalilHD Remix) |
| 4 | Ed Sheeran & Passenger | No Diggity (Kygo Remix) |
| 5 | JP Cooper ft. Mali-Koa | All This Love |
оракул
В Oracle вам нужно использовать DBMS_RANDOM.VALUE
функцию, как показано в следующем примере:
SELECT
artist||' - '||title AS song
FROM song
ORDER BY DBMS_RANDOM.VALUE
При выполнении вышеупомянутого SQL-запроса в Oracle мы получим следующий набор результатов:
| song |
|---------------------------------------------------|
| JP Cooper ft. Mali-Koa - All This Love |
| 2Pac ft. DMX - Rise Of A Champion (GalilHD Remix) |
| HAIM - Don't Save Me (Cyril Hahn Remix) |
| Ed Sheeran & Passenger - No Diggity (Kygo Remix) |
| Miyagi & Эндшпиль ft. Рем Дигга - I Got Love |
Обратите внимание, что песни перечислены в случайном порядке благодаря DBMS_RANDOM.VALUE
вызову функции, используемому предложением ORDER BY.
SQL Server
На SQL Server вам необходимо использовать NEWID
функцию, как показано в следующем примере:
SELECT
CONCAT(CONCAT(artist, ' - '), title) AS song
FROM song
ORDER BY NEWID()
При выполнении вышеупомянутого SQL-запроса на SQL Server мы получим следующий набор результатов:
| song |
|---------------------------------------------------|
| Miyagi & Эндшпиль ft. Рем Дигга - I Got Love |
| JP Cooper ft. Mali-Koa - All This Love |
| HAIM - Don't Save Me (Cyril Hahn Remix) |
| Ed Sheeran & Passenger - No Diggity (Kygo Remix) |
| 2Pac ft. DMX - Rise Of A Champion (GalilHD Remix) |
Обратите внимание, что песни перечислены в случайном порядке благодаря NEWID
вызову функции, используемому предложением ORDER BY.
PostgreSQL
В PostgreSQL вам необходимо использовать random
функцию, как показано в следующем примере:
SELECT
artist||' - '||title AS song
FROM song
ORDER BY random()
При выполнении вышеупомянутого SQL-запроса на PostgreSQL мы получим следующий набор результатов:
| song |
|---------------------------------------------------|
| 2Pac ft. DMX - Rise Of A Champion (GalilHD Remix) |
| JP Cooper ft. Mali-Koa - All This Love |
| Ed Sheeran & Passenger - No Diggity (Kygo Remix) |
| HAIM - Don't Save Me (Cyril Hahn Remix) |
| Miyagi & Эндшпиль ft. Рем Дигга - I Got Love |
Обратите внимание, что песни перечислены в случайном порядке благодаря random
вызову функции, используемому предложением ORDER BY.
MySQL
В MySQL вам необходимо использовать RAND
функцию, как показано в следующем примере:
SELECT
CONCAT(CONCAT(artist, ' - '), title) AS song
FROM song
ORDER BY RAND()
При выполнении вышеупомянутого SQL-запроса на MySQL мы собираемся получить следующий набор результатов:
| song |
|---------------------------------------------------|
| HAIM - Don't Save Me (Cyril Hahn Remix) |
| Ed Sheeran & Passenger - No Diggity (Kygo Remix) |
| Miyagi & Эндшпиль ft. Рем Дигга - I Got Love |
| 2Pac ft. DMX - Rise Of A Champion (GalilHD Remix) |
| JP Cooper ft. Mali-Koa - All This Love |
Обратите внимание, что песни перечислены в случайном порядке благодаря RAND
вызову функции, используемому предложением ORDER BY.