Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cách lấy các hàng ngẫu nhiên từ Bảng SQL Server - Hướng dẫn SQL Server / TSQL Phần 117

Tình huống:

Bạn đang làm việc với tư cách là nhà phát triển SQL Server. Bạn được yêu cầu cung cấp dữ liệu ngẫu nhiên mẫu từ bảng dbo.Customer. Bạn có thể yêu cầu cung cấp 100 hàng ngẫu nhiên hoặc một số phần trăm tổng số dữ liệu từ bảng. Bạn sẽ sử dụng truy vấn nào để cung cấp đầu ra được yêu cầu?

Giải pháp:

Trong bài trước, chúng ta đã học cách lấy n hàng trên cùng từ bảng. Chúng tôi có thể cung cấp số hàng hoặc phần trăm các bản ghi mà chúng tôi muốn lấy từ một bảng bằng cách sử dụng TOP trong truy vấn đã chọn của chúng tôi.

Chúng tôi có thể sử dụng cùng một mệnh đề Top nhưng khi chúng tôi được yêu cầu cung cấp các bản ghi ngẫu nhiên , trước tiên chúng ta cần sắp xếp chúng một cách ngẫu nhiên. Chúng ta có thể sử dụng hàm newid () theo thứ tự mệnh đề để sắp xếp chúng một cách ngẫu nhiên.

Hãy tạo bảng dbo.Customer với một số dữ liệu mẫu.


Tạo bảng dbo. Khách hàng (Id int, FName VARCHAR (50), LName VARCHAR (50), CountryShortName CHAR (2)) Đưa vào dbo.CustomerValues ​​(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) sử dụng NewID () trong Order by để nhận các bản ghi ngẫu nhiên
Giả sử nếu chúng ta muốn lấy 3 bản ghi ngẫu nhiên từ bảng dbo.> Chọn top 3 * Từ dbo.Customerorder của NEWID ()
 
 
Cách lấy bản ghi ngẫu nhiên từ Bảng SQL Server - Hướng dẫn SQL Server / TSQL
 
bạn cũng có thể sử dụng phần trăm nếu bạn thích như hình dưới đây

 Chọn 30 phần trăm hàng đầu * Từ dbo.Customerorder theo NEWID () 
 
Cách lấy bản ghi ngẫu nhiên từ bảng SQL Server bằng cách sử dụng Phần trăm trên cùng với NewID () - Hướng dẫn SQL Server / TSQL
   
2) Bằng cách sử dụng HỆ THỐNG TABLESAMPLE
Theo Microsoft Books Online "HỆ THỐNG TABLESAMPLE trả về tỷ lệ phần trăm hàng gần đúng và tạo giá trị ngẫu nhiên cho mỗi trang 8 KB vật lý trong bảng. Dựa trên giá trị ngẫu nhiên cho một trang và tỷ lệ phần trăm được chỉ định trong truy vấn, một trang hoặc được bao gồm trong mẫu hoặc bị loại trừ. Mỗi trang được đưa vào sẽ trả về tất cả các hàng trong tập kết quả mẫu ".

Từ đây, bạn có thể hiểu rằng nếu bạn có một bảng nhỏ với ít trang, bạn có thể không muốn sử dụng TableSample vì nó sẽ bao gồm hoặc loại trừ toàn bộ trang. Với ít bản ghi trong bảng, bạn có thể muốn sử dụng phương pháp 1 và đối với các bảng lớn, bạn có thể sử dụng TableSample.

Nếu tôi chạy truy vấn bên dưới trên bảng dbo.Customer của mình, đôi khi tôi sẽ không nhận được bản ghi nào và khi nhận được các bản ghi, nó sẽ trả về tất cả các bản ghi khi chúng được đặt trên một trang.

 Chọn * Từ dbo. Mẫu bảng khách hàng (30 phần trăm) 
 
Bạn cũng có thể sử dụng Rows mà bạn muốn với mẫu bảng như hình dưới đây. Các hàng được trả về có thể khác nhau. bạn có thể giới hạn chúng bằng cách sử dụng n đầu trong truy vấn chọn.


 Chọn * Từ dbo. Mẫu bảng khách hàng (2 hàng) 

Khi tôi thực hiện truy vấn trên trên bảng dbo.Customer với tổng số 6 hàng. Nó trả về cho tôi không có hàng nào hoặc tất cả sáu hàng trong số chúng.

Nếu bạn muốn giới hạn, bạn có thể sử dụng truy vấn bên dưới. Một lần nữa, tôi sẽ đề xuất sử dụng TableSample với bảng lớn nơi bạn có dữ liệu trên nhiều trang dữ liệu.

 Chọn top 2 * Từ dbo.Customer tableample (2 hàng) 




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để nối nhiều hàng có cùng id trong sql?

  2. Ràng buộc duy nhất trên nhiều cột

  3. CHÈN SỐ LƯỢNG LỚN SQL Server từ Linux

  4. SQL Server - tham gia bên trong khi cập nhật

  5. Làm cách nào để chỉ chọn các hàng đầu tiên cho mỗi giá trị duy nhất của một cột?