Como expliquei neste artigo , para embaralhar o conjunto de resultados SQL, você precisa usar uma chamada de função específica do banco de dados.
Observe que a classificação de um grande conjunto de resultados usando uma função RANDOM pode ser muito lenta, portanto, faça isso em pequenos conjuntos de resultados.
Se você precisar embaralhar um grande conjunto de resultados e limitá-lo posteriormente, é melhor usar algo como o OracleSAMPLE(N)
ou TABLESAMPLE
no SQL Server ou no PostgreSQL, em vez de uma função aleatória na cláusula ORDER BY.
Portanto, supondo que tenhamos a seguinte tabela de banco de dados:
E as seguintes linhas na song
tabela:
| 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 |
Oráculo
No Oracle, você precisa usar a DBMS_RANDOM.VALUE
função, conforme ilustrado no seguinte exemplo:
SELECT
artist||' - '||title AS song
FROM song
ORDER BY DBMS_RANDOM.VALUE
Ao executar a consulta SQL acima mencionada no Oracle, obteremos o seguinte conjunto de resultados:
| 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 |
Observe que as músicas estão sendo listadas aleatoriamente, graças à DBMS_RANDOM.VALUE
chamada de função usada pela cláusula ORDER BY.
servidor SQL
No SQL Server, você precisa usar a NEWID
função, conforme ilustrado no seguinte exemplo:
SELECT
CONCAT(CONCAT(artist, ' - '), title) AS song
FROM song
ORDER BY NEWID()
Ao executar a consulta SQL acima mencionada no SQL Server, obteremos o seguinte conjunto de resultados:
| 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) |
Observe que as músicas estão sendo listadas aleatoriamente, graças à NEWID
chamada de função usada pela cláusula ORDER BY.
PostgreSQL
No PostgreSQL, você precisa usar a random
função, conforme ilustrado no seguinte exemplo:
SELECT
artist||' - '||title AS song
FROM song
ORDER BY random()
Ao executar a consulta SQL acima mencionada no PostgreSQL, obteremos o seguinte conjunto de resultados:
| 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 |
Observe que as músicas estão sendo listadas aleatoriamente, graças à random
chamada de função usada pela cláusula ORDER BY.
MySQL
No MySQL, você precisa usar a RAND
função, conforme ilustrado no exemplo a seguir:
SELECT
CONCAT(CONCAT(artist, ' - '), title) AS song
FROM song
ORDER BY RAND()
Ao executar a consulta SQL acima mencionada no MySQL, obteremos o seguinte conjunto de resultados:
| 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 |
Observe que as músicas estão sendo listadas aleatoriamente, graças à RAND
chamada de função usada pela cláusula ORDER BY.