Comment choisir au hasard des lignes en SQL?
Je suis en utilisant MSSQL Server 2005. Dans ma db, j'ai une table "customerNames" qui a deux colonnes "Id" et "Nom" et env. 1000 résultats.
Je suis entrain de créer une fonctionnalité où je dois choisir 5 clients de façon aléatoire à chaque fois. Quelqu'un peut me dire comment créer une requête qui sera aléatoire de 5 lignes (Id, Nom) à chaque fois lorsque la requête est exécutée?
- Aléatoire n'est pas une exigence commune pour une Base de données, j'ai été surpris de trouver un lien pour certains SQL
- Dépend de la façon dont beaucoup de hasard que vous voulez. Voir: msdn.microsoft.com/en-us/library/aa175776(SQL.80).aspx pour la comparaison de NOUVELLE_ID contre RAND()
Vous devez vous connecter pour publier un commentaire.
Cela dit, tout le monde semble venir de cette page pour le plus général, la réponse à votre question:
La sélection d'une ligne au hasard dans SQL
Sélectionner une ligne au hasard avec MySQL:
Sélectionner une ligne au hasard avec PostgreSQL:
Sélectionner une ligne au hasard avec Microsoft SQL Server:
Sélectionner une ligne au hasard avec IBM DB2
Sélectionnez un enregistrement aléatoire avec Oracle:
Sélectionner une ligne au hasard avec sqlite:
update tbl_vouchers set tbl_UsersID = (select top(1) id from tbl_Users order by NEWID())
- edit: je ne peux pas obtenir la mise en forme à travailler dans les commentaires 🙁Peut-être ce site seront d'une aide.
Pour ceux qui ne veulent pas cliquer sur:
Au cas où quelqu'un veut un PostgreSQL solution:
Il y a une belle Microsoft SQL Server 2005 solution spécifique ici.
Traite du problème lorsque vous travaillez avec un grand ensemble de résultats (pas la question, je sais).
Sélection de Lignes au Hasard à partir d'une Grande Table
http://msdn.microsoft.com/en-us/library/cc441928.aspx
SELECT * from NOMTABLE ORDRE aléatoire() LIMIT 5;
C'est une vieille question, mais d'essayer d'appliquer un nouveau champ (soit NEWID() ou ORDER BY rand()) à une table avec un grand nombre de lignes serait d'un coût prohibitif. Si vous avez des différentiels, des Identifiants uniques (et n'ont pas de trous), il sera plus efficace de calculer la valeur de X # des Identifiants à être sélectionné au lieu de l'application d'un GUID ou similaire pour chaque ligne, puis en prenant la tête du X # de.
Si vous vouliez sélectionner beaucoup plus de lignes que j'allais le chercher dans le remplissage d'une #tempTable avec un IDENTIFIANT et d'un tas de rand() valeurs à l'aide de chaque rand() valeur à l'échelle de la min-max des valeurs. De cette façon, vous n'avez pas à définir l'ensemble de l' @randomId1...n paramètres. J'ai inclus un exemple ci-dessous à l'aide d'un cte pour remplir la première table.
J'ai trouvé que c'était mieux pour le big data.
TABLESAMPLE(n ROWS) or TABLESAMPLE(n PERCENT)
est aléatoire mais besoin d'ajouter de laTOP n
pour obtenir la bonne taille de l'échantillon.À l'aide de
NEWID()
est très lent sur de grandes tables.Si vous avez une table avec des millions de lignes et de soins sur la performance, ce qui pourrait être une meilleure réponse:
https://msdn.microsoft.com/en-us/library/cc441928.aspx
Comme je l'ai expliqué dans cet article, afin de mélanger le SQL ensemble de résultats, vous devez utiliser une base de données spécifique à l'appel de fonction.
Donc, en supposant que nous avons la table suivante:
Et les lignes suivantes dans le
song
table:Oracle
Sur Oracle, vous devez utiliser le
DBMS_RANDOM.VALUE
fonction, comme illustré par l'exemple suivant:Lors de l'exécution de ladite requête SQL sur Oracle, nous allons obtenir le jeu de résultats suivant:
SQL Server
Sur SQL Server, vous devez utiliser le
NEWID
fonction, comme illustré par l'exemple suivant:Lors de l'exécution de ladite requête SQL sur SQL Server, nous allons obtenir le jeu de résultats suivant:
PostgreSQL
Sur PostgreSQL, vous devez utiliser le
random
fonction, comme illustré par l'exemple suivant:Lors de l'exécution de ladite requête SQL sur PostgreSQL, nous allons obtenir le jeu de résultats suivant:
MySQL
Sur MySQL, vous devez utiliser le
RAND
fonction, comme illustré par l'exemple suivant:Lors de l'exécution de ladite requête SQL sur le serveur MySQL, nous allons obtenir le jeu de résultats suivant: