Seperti yang saya jelaskan di artikel ini , untuk mengocok set hasil SQL, Anda perlu menggunakan panggilan fungsi database-spesifik.
Perhatikan bahwa mengurutkan set hasil besar menggunakan fungsi RANDOM mungkin menjadi sangat lambat, jadi pastikan Anda melakukannya pada set hasil kecil.
Jika Anda harus mengocok set hasil yang besar dan membatasi setelahnya, maka lebih baik menggunakan sesuatu seperti OracleSAMPLE(N)
atau TABLESAMPLE
di SQL Server atau PostgreSQL daripada fungsi acak di klausa ORDER BY.
Jadi, anggap kita memiliki tabel database berikut:
Dan baris-baris berikut dalam song
tabel:
| 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 |
Peramal
Di Oracle, Anda perlu menggunakan DBMS_RANDOM.VALUE
fungsi, seperti yang diilustrasikan oleh contoh berikut:
SELECT
artist||' - '||title AS song
FROM song
ORDER BY DBMS_RANDOM.VALUE
Saat menjalankan kueri SQL yang disebutkan di Oracle, kita akan mendapatkan hasil sebagai berikut:
| 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 |
Perhatikan bahwa lagu sedang terdaftar dalam urutan acak, berkat DBMS_RANDOM.VALUE
panggilan fungsi yang digunakan oleh klausa ORDER BY.
SQL Server
Pada SQL Server, Anda perlu menggunakan NEWID
fungsi, seperti yang diilustrasikan oleh contoh berikut:
SELECT
CONCAT(CONCAT(artist, ' - '), title) AS song
FROM song
ORDER BY NEWID()
Saat menjalankan kueri SQL yang disebutkan di SQL Server, kita akan mendapatkan set hasil berikut:
| 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) |
Perhatikan bahwa lagu sedang terdaftar dalam urutan acak, berkat NEWID
panggilan fungsi yang digunakan oleh klausa ORDER BY.
PostgreSQL
Pada PostgreSQL, Anda perlu menggunakan random
fungsi, seperti yang diilustrasikan oleh contoh berikut:
SELECT
artist||' - '||title AS song
FROM song
ORDER BY random()
Saat menjalankan kueri SQL yang disebutkan di PostgreSQL, kita akan mendapatkan hasil sebagai berikut:
| 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 |
Perhatikan bahwa lagu sedang terdaftar dalam urutan acak, berkat random
panggilan fungsi yang digunakan oleh klausa ORDER BY.
MySQL
Di MySQL, Anda perlu menggunakan RAND
fungsinya, seperti yang diilustrasikan oleh contoh berikut:
SELECT
CONCAT(CONCAT(artist, ' - '), title) AS song
FROM song
ORDER BY RAND()
Saat menjalankan kueri SQL yang disebutkan di MySQL, kita akan mendapatkan hasil sebagai berikut:
| 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 |
Perhatikan bahwa lagu sedang terdaftar dalam urutan acak, berkat RAND
panggilan fungsi yang digunakan oleh klausa ORDER BY.