web-dev-qa-db-fra.com

Renvoyer les lignes dans un ordre aléatoire

Est-il possible d'écrire une requête SQL qui renvoie les lignes de la table dans un ordre aléatoire à chaque exécution de la requête?

104
Arsen Mkrtchyan
SELECT * FROM table
ORDER BY NEWID()
164
Dave Barker

C'est la solution la plus simple:

SELECT quote FROM quotes ORDER BY Rand() 

Bien que ce ne soit pas le plus efficace. Celui-ci est une meilleure solution.

20
Alec Smart

La méthode habituelle consiste à utiliser la fonction NEWID (), qui génère un GUID unique. Alors,

SELECT * FROM dbo.Foo ORDER BY NEWID();
12
devstuff

Pour être efficace et aléatoire, il peut être préférable d’avoir deux requêtes différentes.

Quelque chose comme...

SELECT table_id FROM table

Ensuite, dans la langue de votre choix, choisissez un identifiant aléatoire, puis extrayez les données de cette ligne.

SELECT * FROM table WHERE table_id = $ Rand_id

Mais ce n'est pas vraiment une bonne idée si vous vous attendez à avoir beaucoup de lignes dans le tableau. Il serait préférable que vous fixiez une limite à ce que vous choisissez au hasard. Pour les publications, choisissez au hasard parmi les articles publiés au cours de la dernière année.

0
nilamo

Voici un exemple ( source ):

SET @randomId = Cast(((@maxValue + 1) - @minValue) * Rand() + @minValue AS tinyint);
0
PinoyDev