sql >> Databáze >  >> RDS >> Sqlserver

Jak získat náhodné řádky z tabulky SQL Server - SQL Server / Výukový program TSQL část 117

Scénář:

Pracujete jako vývojář SQL Serveru. Jste požádáni o poskytnutí ukázkových náhodných dat z tabulky dbo.Customer. Můžete požádat o poskytnutí náhodných 100 řádků nebo některých procent celkových dat z tabulky. Jaký dotaz použijete k poskytnutí požadovaného výstupu?

Řešení:

V předchozím příspěvku jsme se naučili, jak získat prvních n řádků z tabulky. Můžeme zadat počet řádků nebo procento záznamů, které chceme z tabulky získat, pomocí TOP v našem výběrovém dotazu.

Můžeme použít stejnou klauzuli Top, ale protože jsme požádáni o poskytnutí náhodných záznamů , musíme je nejprve náhodně seřadit. Můžeme použít funkci newid() v pořadí podle klauzule, abychom je seřadili náhodně.

Vytvořme tabulku dbo.Customer s ukázkovými daty.

Vytvořme tabulku dbo. Zákazník (Id int, FName VARCHAR(50), LNName 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','Ldson' ,'US'),(6,'Alice','John','US')
 
 
 1) použijte NewID ( ) v Order by k získání náhodných záznamů
Řekněme, že pokud máme zájem získat 3 náhodné záznamy z tabulky dbo.Customer, můžeme použít níže uvedený dotaz.

Vyberte top 3 * Z dbo.Customerorder od NEWID()
 
 
Jak získat náhodné záznamy z tabulky SQL Server – SQL Server / Výukový program TSQL
 můžete také použít procenta, pokud chcete, jak je znázorněno níže

Vyberte nejlepších 30 procent * Z dbo.Customerorder by NEWID()
 
Jak získat náhodné záznamy z tabulky SQL Server pomocí Top Percent with NewID() – SQL Server / Výukový program TSQL
2) Pomocí TABLESAMPLE SYSTEM
Podle Microsoft Books Online „TABLESAMPLE SYSTEM vrací přibližné procento řádků a generuje náhodnou hodnotu pro každou fyzickou stránku o velikosti 8 kB v tabulce. Na základě náhodné hodnoty pro stránku a procenta zadaného v dotazu, stránka je buď zahrnuta do ukázky, nebo je vyloučena. Každá stránka, která je zahrnuta, vrátí všechny řádky v sadě ukázkových výsledků."

Odtud můžete pochopit, že pokud máte malou tabulku s několika stránkami, nemusí chtít použít TableSample, protože zahrne nebo vyloučí celou stránku. S několika záznamy v tabulce možná budete chtít použít metodu 1 a pro velké tabulky můžete použít TableSample.

Pokud bych spustil níže dotaz na mou tabulku dbo.Customer, někdy nedostanu žádné záznamy a po získání záznamů vrátí všechny záznamy tak, jak jsou umístěny na jedné stránce.

Vybrat * Z dbo.Customer tablesample (30 procent)
 Můžete také použít požadované řádky s ukázkou tabulky, jak je uvedeno níže. Vrácené řádky se mohou lišit. můžete je omezit použitím top n ve výběrovém dotazu.


Vybrat * Z dbo.Customer tablesample (2 řádky)

Když jsem provedl výše uvedený dotaz na tabulku dbo.Customer s celkem 6 řádky. Buď mi to nevrátilo žádné řádky, nebo všech šest.

Pokud chcete omezit, můžete použít níže uvedený dotaz. Ještě jednou navrhuji použít TableSample s velkou tabulkou, kde máte data na více datových stránkách.

Vyberte top 2 * Z dbo.Customer tablesample (2 řádky)




  1. Uložit běžný dotaz jako sloupec?

  2. Předávání více hodnot v jednom parametru

  3. Neplatný typ chyby syntaxe=MyISAM v DDL generovaný Hibernate

  4. Měl by MAMP vrátit ::1 jako IP na localhost?