Skenario:
Anda bekerja sebagai pengembang SQL Server. Anda diminta untuk memberikan sampel data acak dari tabel dbo.Customer. Anda mungkin diminta untuk memberikan 100 baris acak atau beberapa persen dari total data dari tabel. Permintaan apa yang akan Anda gunakan untuk memberikan keluaran yang diperlukan?Solusi:
Di posting sebelumnya, kami belajar cara mendapatkan n baris teratas dari tabel. Kami dapat memberikan jumlah baris atau persen catatan yang ingin kami dapatkan dari tabel dengan menggunakan TOP dalam kueri pemilihan kami.Kami dapat menggunakan klausa Top yang sama tetapi karena kami diminta untuk memberikan catatan acak , kita perlu mengurutkannya secara acak terlebih dahulu. Kita bisa menggunakan fungsi newid() untuk mengurutkannya berdasarkan klausa untuk mengurutkannya secara acak.
Mari kita buat tabel dbo.Customer dengan beberapa contoh data.
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) gunakan NewID ( ) di Order by untuk mendapatkan record acak
Katakanlah jika kita tertarik untuk mendapatkan 3 record acak dari tabel dbo.Customer, kita dapat menggunakan query di bawah ini.
Select top 3 * From dbo.Customer order by NEWID()
Cara mendapatkan catatan Acak dari Tabel SQL Server - Tutorial SQL Server / TSQL |
Anda juga dapat menggunakan persen jika Anda suka seperti yang ditunjukkan di bawah ini
Select top 30 percent * From dbo.Customer order by NEWID()
Cara mendapatkan catatan acak dari tabel SQL Server menggunakan Persen Teratas dengan NewID() - Tutorial SQL Server / TSQL |
2) Dengan menggunakan TABLESAMPLE SYSTEM
Sesuai dengan Microsoft Books Online "SISTEM TABLESAMPLE mengembalikan perkiraan persentase baris dan menghasilkan nilai acak untuk setiap halaman fisik 8-KB dalam tabel. Berdasarkan nilai acak untuk halaman dan persentase yang ditentukan dalam kueri, halaman disertakan dalam sampel atau dikecualikan. Setiap halaman yang disertakan mengembalikan semua baris dalam kumpulan hasil sampel".
Dari sini Anda dapat memahami bahwa jika Anda memiliki tabel kecil dengan beberapa halaman , Anda mungkin tidak ingin menggunakan TableSample karena akan menyertakan atau mengecualikan seluruh halaman. Dengan sedikit catatan dalam tabel, Anda mungkin ingin menggunakan metode 1 dan untuk tabel besar Anda dapat menggunakan TableSample.
Jika saya akan menjalankan kueri di bawah ini pada tabel dbo.Pelanggan saya, Terkadang saya tidak akan mendapatkan catatan dan ketika mendapatkan catatan, itu akan mengembalikan semua catatan seperti yang ditempatkan pada satu halaman.
Select * From dbo.Customer tablesample (30 percent)
Anda juga dapat menggunakan Baris yang Anda inginkan dengan contoh tabel seperti yang ditunjukkan di bawah ini. Baris yang dikembalikan dapat bervariasi. Anda dapat membatasinya dengan menggunakan top n dalam kueri pemilihan.
Select * From dbo.Customer tablesample (2 rows)
Saat saya mengeksekusi query di atas pada tabel dbo.Customer dengan total 6 baris. Itu tidak mengembalikan saya tanpa baris atau keenamnya.
Jika Anda ingin membatasi, Anda dapat menggunakan kueri di bawah ini. Sekali lagi, saya akan menyarankan untuk menggunakan TableSample dengan tabel besar di mana Anda memiliki data pada beberapa halaman data.
Select top 2 * From dbo.Customer tablesample (2 rows)