Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment obtenir des lignes aléatoires à partir de la table SQL Server - Tutoriel SQL Server / TSQL Partie 117

Scénario :

Vous travaillez en tant que développeur SQL Server. Vous êtes invité à fournir des exemples de données aléatoires à partir de la table dbo.Customer. Vous pouvez être invité à fournir 100 lignes aléatoires ou un pourcentage des données totales du tableau. Quelle requête utiliserez-vous pour fournir la sortie requise ?

Solution :

Dans le post précédent, nous avons appris comment obtenir les n premières lignes du tableau. Nous pouvons fournir le nombre de lignes ou le pourcentage d'enregistrements que nous voulons obtenir d'une table en utilisant TOP dans notre requête de sélection.

Nous pouvons utiliser la même clause Top mais comme on nous demande de fournir les enregistrements aléatoires , nous devons d'abord les trier au hasard. Nous pouvons utiliser la fonction newid() dans l'ordre par clause pour les trier de manière aléatoire.

Créons la table dbo.Customer avec quelques exemples de données.

Créons la table dbo. Client (Id int, FName VARCHAR(50), LName VARCHAR(50), CountryShortName CHAR(2))GOinsert into dbo.CustomerValues ​​(1,'Raza','M','PK'),(2,'Rita' ,'John','US'),(3,'Sukhi','Singh',Null),(4,'James','Smith','CA'),(5,'Robert','Ladson' ,'US'),(6,'Alice','John','US')
 
 
 1) utilisez NewID ( ) dans Order by pour obtenir des enregistrements aléatoires
Disons que si nous sommes intéressés pour obtenir 3 enregistrements aléatoires de la table dbo.Customer, nous pouvons utiliser la requête ci-dessous.

Sélectionner les 3 premiers * De dbo.Customerorder par NEWID()
 
 
Comment obtenir des enregistrements aléatoires à partir de la table SQL Server - Tutoriel SQL Server / TSQL
 vous pouvez également utiliser le pourcentage si vous le souhaitez, comme indiqué ci-dessous

Sélectionnez les 30 % supérieurs * De dbo.Customerorder par NEWID()
 
Comment obtenir des enregistrements aléatoires de la table SQL Server en utilisant Top Percent avec NewID() - Tutoriel SQL Server / TSQL
 
2) En utilisant TABLESAMPLE SYSTEM
Selon la documentation en ligne de Microsoft, "TABLESAMPLE SYSTEM renvoie un pourcentage approximatif de lignes et génère une valeur aléatoire pour chaque page physique de 8 Ko de la table. En fonction de la valeur aléatoire d'une page et du pourcentage spécifié dans la requête, une page est soit incluse dans l'échantillon, soit exclue. Chaque page incluse renvoie toutes les lignes de l'exemple de jeu de résultats".

À partir de là, vous pouvez comprendre que si vous avez un petit tableau avec quelques pages, vous peut ne pas vouloir utiliser TableSample car il inclura ou exclura la page entière. Avec peu d'enregistrements dans la table, vous pouvez utiliser la méthode 1 et pour les grandes tables, vous pouvez utiliser TableSample.

Si j'exécutais la requête ci-dessous sur ma table dbo.Customer, parfois je n'obtiendrai aucun enregistrement et lors de l'obtention des enregistrements, il renverra tous les enregistrements tels qu'ils sont placés sur une seule page.

Sélectionnez * De dbo.Customer tableample (30 %)
 Vous pouvez également utiliser les lignes de votre choix avec un exemple de tableau, comme indiqué ci-dessous. Les lignes renvoyées peuvent varier. vous pouvez les limiter en utilisant top n dans la requête select.


Select * From dbo.Customer tableample (2 rows)

Lorsque j'ai exécuté la requête ci-dessus sur la table dbo.Customer avec un total de 6 lignes. Il ne m'a renvoyé aucune ligne ou les six.

Si vous souhaitez limiter, vous pouvez utiliser la requête ci-dessous. Encore une fois, je suggérerai d'utiliser TableSample avec une grande table où vous avez des données sur plusieurs pages de données.

Sélectionnez les 2 premiers * De dbo.Customer tablesample (2 rows)