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

Sådan får du tilfældige rækker fra SQL Server Table - SQL Server / TSQL Tutorial Del 117

Scenarie:

Du arbejder som SQL Server-udvikler. Du bliver bedt om at give eksempler på tilfældige data fra dbo.Customer-tabellen. Du bliver muligvis bedt om at angive tilfældige 100 rækker eller nogle procent af de samlede data fra tabellen. Hvilken forespørgsel vil du bruge til at levere det nødvendige output?

Løsning:

I tidligere indlæg lærte vi, hvordan man får de øverste n rækker fra tabellen. Vi kan enten levere rækkeantal eller procent af poster, vi ønsker at hente fra en tabel, ved at bruge TOP i vores udvalgte forespørgsel.

Vi kan bruge den samme Top-sætning, men da vi bliver bedt om at levere de tilfældige poster , vi skal først sortere dem tilfældigt. Vi kan bruge newid()-funktionen i rækkefølge efter klausul for at sortere dem tilfældigt.

Lad os oprette dbo.Kundetabel med nogle eksempeldata.

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) brug NewID ( ) i rækkefølge efter for at få tilfældige poster
Lad os sige, at hvis vi er interesseret i at få 3 tilfældige poster fra dbo. Kundetabel, kan vi bruge nedenstående forespørgsel.

Select top 3 * From dbo.Customer
order by NEWID()
 
 
Sådan får du tilfældige poster fra SQL Server-tabel - SQL Server / TSQL-vejledning
 du kan også bruge procent, hvis du vil som vist nedenfor

Select top 30 percent * From dbo.Customer
order by NEWID()
 
Sådan får du tilfældige poster fra SQL Server-tabellen ved at bruge Top Percent med NewID() - SQL Server / TSQL Tutorial

2) Ved at bruge TABLESAMPLE SYSTEM
I henhold til Microsoft Books Online "TABLEEKSEMPELSYSTEM returnerer en omtrentlig procentdel af rækker og genererer en tilfældig værdi for hver fysisk 8-KB side i tabellen. Baseret på den tilfældige værdi for en side og den procentdel, der er angivet i forespørgslen, en side er enten inkluderet i prøven eller ekskluderet. Hver side, der er inkluderet, returnerer alle rækker i prøveresultatsættet".

Herfra kan du forstå, at hvis du har en lille tabel med få sider, kan du ønsker måske ikke at bruge TableSample, da det vil inkludere eller ekskludere hele siden. Med få poster i tabellen, vil du måske bruge metode 1, og til store tabeller kan du bruge TableSample.

Hvis jeg ville køre nedenstående forespørgsel på min dbo. Kundetabel, engang vil jeg ikke få nogen poster og Når du henter posterne, returnerer den alle posterne, som de er placeret på en enkelt side.

Select * From dbo.Customer tablesample (30 percent)
 Du kan også bruge rækker, du ønsker med tabeleksempel som vist nedenfor. De returnerede rækker kan variere. du kan begrænse dem ved at bruge top n i udvalgte forespørgsler.


Select * From dbo.Customer tablesample (2 rows)

Da jeg udførte ovenstående forespørgsel på dbo.Kundetabel med i alt 6 rækker. Det gav mig enten ingen rækker eller alle seks af dem.

Hvis du vil begrænse, kan du bruge nedenstående forespørgsel. Endnu en gang vil jeg foreslå at bruge TableSample med big table, hvor du har data på flere datasider.

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




  1. Mytop – Et nyttigt værktøj til overvågning af MySQL/MariaDB-ydeevne i Linux

  2. <expr> forventet, fik '?'

  3. Ret "FEJL:mangler FROM-klausulindtastning for tabel" i PostgreSQL, når du bruger UNION, EXCEPT eller INTERSECT

  4. Oracle SQL - Sådan hentes de højeste 5 værdier af en kolonne