Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak uzyskać losowe wiersze z tabeli SQL Server — samouczek SQL Server / TSQL część 117

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)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wywołaj procedurę składowaną z parametrem w c#

  2. 4 sposoby, aby dowiedzieć się, jakie kolumny zostaną zwrócone przez procedurę składowaną w SQL Server

  3. Poprawki problemu z przebudową indeksu online SQL Server 2012 i 2014

  4. Niejawna konwersja formatu źródłowego SSIS dla daty i godziny

  5. Bootstrapowanie SQL Express z WiX?