sql >> Database >  >> RDS >> Sqlserver

Willekeurige rijen uit de SQL Server-tabel halen - SQL Server / TSQL-zelfstudie, deel 117

Scenario:

Je werkt als SQL Server ontwikkelaar. U wordt gevraagd om willekeurige steekproefgegevens uit de dbo.Klanttabel te verstrekken. Mogelijk wordt u gevraagd om willekeurige 100 rijen of een bepaald percentage van de totale gegevens uit de tabel op te geven. Welke query gebruikt u om de vereiste uitvoer te leveren?

Oplossing:

In het vorige bericht hebben we geleerd hoe we de bovenste n rijen uit de tabel kunnen halen. We kunnen het aantal rijen of het percentage records dat we uit een tabel willen halen, opgeven door TOP te gebruiken in onze selectiequery.

We kunnen dezelfde Top-clausule gebruiken, maar omdat we worden gevraagd om de willekeurige records op te geven , moeten we ze eerst willekeurig sorteren. We kunnen de functie newid() gebruiken in volgorde van clausule om ze willekeurig te sorteren.

Laten we een dbo.Klanttabel maken met wat voorbeeldgegevens.

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) gebruik NewID ( ) in Order by om willekeurige records te krijgen
Laten we zeggen dat als we geïnteresseerd zijn om 3 willekeurige records uit de dbo.Customer-tabel te krijgen, we onderstaande query kunnen gebruiken.

Select top 3 * From dbo.Customer
order by NEWID()
 
 
Willekeurige records ophalen uit de SQL Server-tabel - SQL Server / TSQL-zelfstudie
 u kunt desgewenst ook procent gebruiken, zoals hieronder weergegeven

Select top 30 percent * From dbo.Customer
order by NEWID()
 
Willekeurige records uit de SQL Server-tabel halen met behulp van Top Percent met NewID() - SQL Server / TSQL-zelfstudie

2) Door TABLESAMPLE SYSTEEM te gebruiken
Volgens Microsoft Books Online "TABLESAMPLE SYSTEM retourneert een geschat percentage rijen en genereert een willekeurige waarde voor elke fysieke pagina van 8 KB in de tabel. Gebaseerd op de willekeurige waarde voor een pagina en het percentage gespecificeerd in de query, een pagina is opgenomen in het voorbeeld of uitgesloten. Elke pagina die is opgenomen, retourneert alle rijen in de voorbeeldresultatenset".

Van hieruit kunt u begrijpen dat als u een kleine tabel met weinig pagina's heeft, u misschien wilt u TableSample niet gebruiken omdat het de hele pagina zal opnemen of uitsluiten. Met weinig records in de tabel, wilt u misschien methode 1 gebruiken en voor grote tabellen kunt u TableSample gebruiken.

Als ik onderstaande query op mijn dbo.Klanttabel zou uitvoeren, krijg ik soms geen records en wanneer de records worden opgehaald, worden alle records geretourneerd zoals ze op één pagina zijn geplaatst.

Select * From dbo.Customer tablesample (30 percent)
 U kunt ook de gewenste rijen gebruiken met een tabelvoorbeeld, zoals hieronder wordt weergegeven. De geretourneerde rijen kunnen variëren. je kunt ze beperken door top n te gebruiken in de selectiequery.


Select * From dbo.Customer tablesample (2 rows)

Toen ik bovenstaande query uitvoerde op de dbo.Customer-tabel met in totaal 6 rijen. Het gaf me ofwel geen rijen of alle zes.

Als je wilt beperken, kun je onderstaande query gebruiken. Nogmaals, ik zal voorstellen om TableSample te gebruiken met een grote tabel waar u gegevens op meerdere gegevenspagina's hebt.

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




  1. Hoe een rij in SQL te verwijderen

  2. DROP-FUNCTIE zonder het aantal/type parameters te kennen?

  3. ExecuteNonQuery:verbindingseigenschap is niet geïnitialiseerd.

  4. MariaDB JSON_INSERT() uitgelegd