Jak wyjaśniłem w tym artykule , aby przetasować zestaw wyników SQL, musisz użyć wywołania funkcji specyficznej dla bazy danych.
Zauważ, że sortowanie dużego zestawu wyników za pomocą funkcji RANDOM może okazać się bardzo wolne, więc upewnij się, że robisz to na małych zestawach wyników.
Jeśli masz shuffle duży zestaw wyników i ograniczyć je potem, to lepiej użyć coś jak OracleSAMPLE(N)
albo TABLESAMPLE
w SQL Server lub PostgreSQL zamiast losowej funkcji w klauzuli ORDER BY.
Zakładając, że mamy następującą tabelę bazy danych:
I następujące wiersze w song
tabeli:
| 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 |
Wyrocznia
W Oracle należy użyć DBMS_RANDOM.VALUE
funkcji, jak pokazano w poniższym przykładzie:
SELECT
artist||' - '||title AS song
FROM song
ORDER BY DBMS_RANDOM.VALUE
Podczas uruchamiania wyżej wspomnianego zapytania SQL w Oracle otrzymamy następujący zestaw wyników:
| 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 |
Zauważ, że utwory są wyświetlane w kolejności losowej, dzięki DBMS_RANDOM.VALUE
wywołaniu funkcji stosowanemu w klauzuli ORDER BY.
SQL Server
W SQL Server musisz użyć NEWID
funkcji, jak pokazano w poniższym przykładzie:
SELECT
CONCAT(CONCAT(artist, ' - '), title) AS song
FROM song
ORDER BY NEWID()
Podczas uruchamiania wspomnianego zapytania SQL na serwerze SQL Server otrzymamy następujący zestaw wyników:
| 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) |
Zauważ, że utwory są wyświetlane w kolejności losowej, dzięki NEWID
wywołaniu funkcji stosowanemu w klauzuli ORDER BY.
PostgreSQL
W PostgreSQL musisz użyć random
funkcji, co ilustruje poniższy przykład:
SELECT
artist||' - '||title AS song
FROM song
ORDER BY random()
Podczas uruchamiania wyżej wspomnianego zapytania SQL na PostgreSQL otrzymamy następujący zestaw wyników:
| 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 |
Zauważ, że utwory są wyświetlane w kolejności losowej, dzięki random
wywołaniu funkcji stosowanemu w klauzuli ORDER BY.
MySQL
W MySQL musisz użyć RAND
funkcji, co ilustruje poniższy przykład:
SELECT
CONCAT(CONCAT(artist, ' - '), title) AS song
FROM song
ORDER BY RAND()
Podczas uruchamiania wyżej wspomnianego zapytania SQL na MySQL otrzymamy następujący zestaw wyników:
| 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 |
Zauważ, że utwory są wyświetlane w kolejności losowej, dzięki RAND
wywołaniu funkcji stosowanemu w klauzuli ORDER BY.