Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come ottenere righe casuali dalla tabella SQL Server - Tutorial SQL Server / TSQL Parte 117

Scenario:

Stai lavorando come sviluppatore di SQL Server. Ti viene chiesto di fornire dati casuali di esempio dalla tabella dbo.Customer. È possibile che venga chiesto di fornire 100 righe casuali o una percentuale dei dati totali dalla tabella. Quale query utilizzerai per fornire l'output richiesto?

Soluzione:

Nel post precedente, abbiamo imparato come ottenere le prime n righe dalla tabella. Possiamo fornire il conteggio delle righe o la percentuale di record che vogliamo ottenere da una tabella utilizzando TOP nella nostra query di selezione.

Possiamo utilizzare la stessa clausola Top ma poiché ci viene chiesto di fornire i record casuali , dobbiamo prima ordinarli casualmente. Possiamo usare la funzione newid() in ordine per clausola per ordinarli in modo casuale.

Creiamo la tabella dbo.Customer con alcuni dati di esempio.

Create table dbo.Customer
 (Id int,
  FName VARCHAR(50),
  LName VARCHAR(50),
  CountryShortName CHAR(2))
GO
insert into dbo.Customer
Values (
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) usa NewID ( ) in Order by per ottenere record casuali
Diciamo che se siamo interessati a ottenere 3 record casuali dalla tabella dbo.Customer, possiamo utilizzare la query seguente.

Select top 3 * From dbo.Customer
order by NEWID()
 
 
Come ottenere record casuali dalla tabella SQL Server - Tutorial SQL Server/TSQL
 puoi anche utilizzare la percentuale, se lo desideri, come mostrato di seguito

Select top 30 percent * From dbo.Customer
order by NEWID()
 
Come ottenere record casuali dalla tabella di SQL Server utilizzando la percentuale superiore con NewID() - Tutorial SQL Server/TSQL

2) Utilizzando TABLESAMPLE SYSTEM
In base alla documentazione in linea di Microsoft, "TABLESAMPLE SYSTEM restituisce una percentuale approssimativa di righe e genera un valore casuale per ogni pagina fisica di 8 KB nella tabella. In base al valore casuale di una pagina e alla percentuale specificata nella query, una pagina è inclusa nel campione o esclusa. Ogni pagina inclusa restituisce tutte le righe nel set di risultati del campione".

Da qui puoi capire che se hai una piccola tabella con poche pagine, puoi potrebbe non voler utilizzare TableSample poiché includerà o escluderà l'intera pagina. Con pochi record nella tabella, potresti voler utilizzare il metodo 1 e per tabelle di grandi dimensioni puoi usare TableSample.

Se dovessi eseguire la query sotto la mia tabella dbo.Customer, a volte non otterrò alcun record e una volta ottenuti i record, verranno restituiti tutti i record in quanto sono posizionati su un'unica pagina.

Select * From dbo.Customer tablesample (30 percent)
 Puoi anche utilizzare le righe che desideri con l'esempio di tabella come mostrato di seguito. Le righe restituite possono variare. puoi limitarli utilizzando le prime n nella query di selezione.


Select * From dbo.Customer tablesample (2 rows)

Quando ho eseguito la query precedente sulla tabella dbo.Customer con un totale di 6 righe. Non mi ha restituito nessuna riga o tutte e sei le righe.

Se vuoi limitare, puoi utilizzare la query di seguito. Ancora una volta, suggerirò di utilizzare TableSample con una tabella grande in cui sono presenti dati su più pagine di dati.

Select top 2 * From dbo.Customer tablesample (2 rows)