Scenariusz:
Pracujesz jako programista SQL Server. Prosimy o podanie przykładowych losowych danych z tabeli dbo.Customer. Możesz poprosić o podanie losowych 100 wierszy lub jakiegoś procentu wszystkich danych z tabeli. Jakiego zapytania użyjesz, aby dostarczyć wymagane dane wyjściowe?Rozwiązanie:
W poprzednim poście dowiedzieliśmy się, jak pobrać górne n wierszy z tabeli. Możemy podać liczbę wierszy lub procent rekordów, które chcemy uzyskać z tabeli, używając TOP w naszym zapytaniu wybierającym.Możemy użyć tej samej klauzuli Top, ale ponieważ zostaniemy poproszeni o podanie losowych rekordów , najpierw musimy je posortować losowo. Możemy użyć funkcji newid() w kolejności według klauzuli, aby posortować je losowo.
Utwórzmy tabelę dbo.Customer z przykładowymi danymi.
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) użyj NewID ( ) w Order by, aby uzyskać losowe rekordy
Powiedzmy, że jeśli jesteśmy zainteresowani uzyskaniem 3 losowych rekordów z tabeli dbo.Customer, możemy użyć poniższego zapytania.
Select top 3 * From dbo.Customer order by NEWID()
Jak uzyskać losowe rekordy z tabeli SQL Server — samouczek SQL Server / TSQL |
możesz również użyć procentu, jeśli chcesz, jak pokazano poniżej
Select top 30 percent * From dbo.Customer order by NEWID()
Jak uzyskać losowe rekordy z tabeli SQL Server przy użyciu Top Percent z NewID() — samouczek SQL Server / TSQL |
2) Korzystając z SYSTEMU TABLESAMPLE
Zgodnie z Microsoft Books Online „SYSTEM PRÓB TABELI zwraca przybliżoną wartość procentową wierszy i generuje losową wartość dla każdej fizycznej strony o wielkości 8 KB w tabeli. Na podstawie losowej wartości dla strony i wartości procentowej określonej w zapytaniu, strona jest uwzględniona w próbce lub wykluczona. Każda uwzględniona strona zwraca wszystkie wiersze z przykładowego zestawu wyników”.
Możesz zrozumieć, że jeśli masz małą tabelę z kilkoma stronami , możesz może nie chcieć używać TableSample, ponieważ uwzględni lub wykluczy całą stronę. Mając niewiele rekordów w tabeli, możesz chcieć użyć metody 1, a dla dużych tabel możesz użyć TableSample.
Gdybym uruchomił poniższe zapytanie w mojej tabeli dbo.Customer, czasami nie otrzymam żadnych rekordów i gdy uzyskasz rekordy, zwróci wszystkie rekordy, ponieważ są one umieszczone na jednej stronie.
Select * From dbo.Customer tablesample (30 percent)
Możesz również użyć żądanych wierszy z próbką tabeli, jak pokazano poniżej. Zwrócone wiersze mogą się różnić. możesz je ograniczyć, używając górnego n w zapytaniu wybierającym.
Select * From dbo.Customer tablesample (2 rows)
Gdy wykonałem powyższe zapytanie w tabeli dbo.Customer zawierającej łącznie 6 wierszy. Zwrócił mi brak wierszy lub wszystkie sześć.
Jeśli chcesz ograniczyć, możesz użyć poniższego zapytania. Jeszcze raz zasugeruję użycie TableSample z dużą tabelą, w której masz dane na wielu stronach danych.
Select top 2 * From dbo.Customer tablesample (2 rows)