Como expliqué en este artículo , para barajar el conjunto de resultados de SQL, debe usar una llamada de función específica de la base de datos.
Tenga en cuenta que ordenar un gran conjunto de resultados utilizando una función ALEATORIA puede resultar muy lento, así que asegúrese de hacerlo en pequeños conjuntos de resultados.
Si tiene que barajar un gran conjunto de resultados y limitarlo después, es mejor usar algo como OracleSAMPLE(N)
o el TABLESAMPLE
en SQL Server o PostgreSQL en lugar de una función aleatoria en la cláusula ORDER BY.
Entonces, suponiendo que tengamos la siguiente tabla de base de datos:
Y las siguientes filas en la song
tabla:
| 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
En Oracle, debe usar la DBMS_RANDOM.VALUE
función, como se ilustra en el siguiente ejemplo:
SELECT
artist||' - '||title AS song
FROM song
ORDER BY DBMS_RANDOM.VALUE
Al ejecutar la consulta SQL mencionada anteriormente en Oracle, obtendremos el siguiente 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 las canciones se enumeran en orden aleatorio, gracias a la DBMS_RANDOM.VALUE
llamada a la función utilizada por la cláusula ORDER BY.
servidor SQL
En SQL Server, debe usar la NEWID
función, como se ilustra en el siguiente ejemplo:
SELECT
CONCAT(CONCAT(artist, ' - '), title) AS song
FROM song
ORDER BY NEWID()
Al ejecutar la consulta SQL mencionada anteriormente en SQL Server, obtendremos el siguiente 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 las canciones se enumeran en orden aleatorio, gracias a la NEWID
llamada a la función utilizada por la cláusula ORDER BY.
PostgreSQL
En PostgreSQL, debe usar la random
función, como se ilustra en el siguiente ejemplo:
SELECT
artist||' - '||title AS song
FROM song
ORDER BY random()
Al ejecutar la consulta SQL mencionada anteriormente en PostgreSQL, obtendremos el siguiente 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 las canciones se enumeran en orden aleatorio, gracias a la random
llamada a la función utilizada por la cláusula ORDER BY.
MySQL
En MySQL, debe usar la RAND
función, como se ilustra en el siguiente ejemplo:
SELECT
CONCAT(CONCAT(artist, ' - '), title) AS song
FROM song
ORDER BY RAND()
Al ejecutar la consulta SQL mencionada anteriormente en MySQL, obtendremos el siguiente 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 las canciones se enumeran en orden aleatorio, gracias a la RAND
llamada a la función utilizada por la cláusula ORDER BY.