sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man får slumpmässiga rader från SQL Server Table - SQL Server / TSQL Tutorial Del 117

Scenario:

Du arbetar som SQL Server-utvecklare. Du ombeds att tillhandahålla slumpmässiga exempeldata från dbo.Customer-tabellen. Du kanske bett om att tillhandahålla slumpmässiga 100 rader eller någon procent av den totala data från tabellen. Vilken fråga kommer du att använda för att ge önskad utdata?

Lösning:

I tidigare inlägg lärde vi oss hur man får de n översta raderna från tabellen. Vi kan antingen tillhandahålla radantal eller procent av poster vi vill hämta från en tabell genom att använda TOP i vår urvalsfråga.

Vi kan använda samma Top-sats men eftersom vi ombeds tillhandahålla de slumpmässiga posterna , vi måste sortera dem slumpmässigt först. Vi kan använda funktionen newid() i ordning efter sats för att sortera dem slumpmässigt.

Låt oss skapa dbo.Kundtabell med några exempeldata.

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) använd NewID ( ) i Order by för att få slumpmässiga poster
Låt oss säga att om vi är intresserade av att få 3 slumpmässiga poster från dbo.Customer-tabellen kan vi använda nedanstående fråga.

Select top 3 * From dbo.Customer
order by NEWID()
 
 
Hur får du slumpmässiga poster från SQL Server Table - SQL Server / TSQL självstudie
 du kan också använda procent om du vill som visas nedan

Select top 30 percent * From dbo.Customer
order by NEWID()
 
Hur man hämtar slumpmässiga poster från SQL Server-tabellen genom att använda Top Percent with NewID() - SQL Server / TSQL Tutorial

2) Genom att använda TABLESAMPLE SYSTEM
I enlighet med Microsoft Books Online "TABLESAMPLE SYSTEM returnerar en ungefärlig procentandel av rader och genererar ett slumpmässigt värde för varje fysisk 8-KB sida i tabellen. Baserat på det slumpmässiga värdet för en sida och den procentandel som anges i frågan, en sida är antingen inkluderad i urvalet eller exkluderad. Varje sida som ingår returnerar alla rader i exempelresultatuppsättningen".

Härifrån kan du förstå att om du har en liten tabell med få sidor , du kanske inte vill använda TableSample eftersom det kommer att inkludera eller exkludera hela sidan. Med få poster i tabellen kanske du vill använda metod 1 och för stora tabeller kan du använda TableSample.

Om jag skulle köra nedanstående fråga på min dbo.Kundtabell, någon gång får jag inga poster och När du hämtar posterna returnerar den alla poster när de är placerade på en sida.

Select * From dbo.Customer tablesample (30 percent)
 Du kan också använda rader du vill med tabellexempel som visas nedan. Raderna som returneras kan variera. du kan begränsa dem genom att använda top n i urvalsfrågan.


Select * From dbo.Customer tablesample (2 rows)

När jag körde ovanstående fråga på dbo.Kundtabell med totalt 6 rader. Det gav mig antingen inga rader eller alla sex av dem.

Om du vill begränsa kan du använda nedanstående fråga. Återigen kommer jag att föreslå att du använder TableSample med stor tabell där du har data på flera datasidor.

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




  1. Arbeta med Java Data i Alteryx

  2. Skapa en tabell i SQLite

  3. SQL Server 2008 Vertikal data till horisontell

  4. Att ställa in schemat i PostgreSQL JDBC verkar inte fungera