Saya menggunakan MSSQL Server 2005. Dalam db saya, saya memiliki tabel "customerNames" yang memiliki dua kolom "Id" dan "Name" dan kira-kira. 1.000 hasil.
Saya membuat fungsionalitas di mana saya harus memilih 5 pelanggan secara acak setiap waktu. Adakah yang bisa memberi tahu saya cara membuat kueri yang akan mendapatkan 5 baris acak (Id, dan Nama) setiap kali ketika kueri dieksekusi?
Jawaban:
Yang mengatakan, semua orang tampaknya datang ke halaman ini untuk jawaban yang lebih umum untuk pertanyaan Anda:
Memilih baris acak dalam SQL
Pilih baris acak dengan MySQL:
Pilih baris acak dengan PostgreSQL:
Pilih baris acak dengan Microsoft SQL Server:
Pilih baris acak dengan IBM DB2
Pilih catatan acak dengan Oracle:
Pilih baris acak dengan sqlite:
sumber
update tbl_vouchers set tbl_UsersID = (select top(1) id from tbl_Users order by NEWID())
- sunting: Saya tidak dapat memformat agar berfungsi dalam komentar :(sumber
Jika seseorang menginginkan solusi PostgreSQL:
sumber
Mungkin situs ini akan membantu.
Bagi mereka yang tidak ingin mengklik:
sumber
Ada solusi spesifik Microsoft SQL Server 2005 di sini. Berurusan dengan masalah di mana Anda bekerja dengan set hasil yang besar (bukan pertanyaan yang saya tahu).
Memilih Baris Secara Acak dari Tabel Besar http://msdn.microsoft.com/en-us/library/cc441928.aspx
sumber
Jika Anda memiliki meja dengan jutaan baris dan peduli dengan kinerja, ini bisa menjadi jawaban yang lebih baik:
https://msdn.microsoft.com/en-us/library/cc441928.aspx
sumber
Ini adalah pertanyaan lama, tetapi mencoba menerapkan bidang baru (baik NEWID () atau ORDER BY rand ()) ke tabel dengan banyak baris akan sangat mahal. Jika Anda memiliki tambahan, ID unik (dan tidak memiliki lubang) akan lebih efisien untuk menghitung X # ID yang akan dipilih daripada menerapkan GUID atau mirip dengan setiap baris tunggal dan kemudian mengambil X # atas.
Jika Anda ingin memilih lebih banyak baris, saya akan mencari populasi #tempTable dengan ID dan sekelompok nilai rand () kemudian menggunakan setiap nilai rand () untuk menskala ke nilai min-max. Dengan begitu Anda tidak perlu mendefinisikan semua parameter @ randomId1 ... n. Saya telah memasukkan contoh di bawah ini menggunakan CTE untuk mengisi tabel awal.
sumber
sumber
Saya menemukan ini berfungsi paling baik untuk big data.
TABLESAMPLE(n ROWS) or TABLESAMPLE(n PERCENT)
acak tetapi perlu menambahkanTOP n
untuk mendapatkan ukuran sampel yang benar.Penggunaannya
NEWID()
sangat lambat pada tabel besar.sumber
Seperti yang saya jelaskan di artikel ini , untuk mengocok set hasil SQL, Anda perlu menggunakan panggilan fungsi database-spesifik.
Jadi, anggap kita memiliki tabel database berikut:
Dan baris-baris berikut dalam
song
tabel:Peramal
Di Oracle, Anda perlu menggunakan
DBMS_RANDOM.VALUE
fungsi, seperti yang diilustrasikan oleh contoh berikut:Saat menjalankan kueri SQL yang disebutkan di Oracle, kita akan mendapatkan hasil sebagai berikut:
SQL Server
Pada SQL Server, Anda perlu menggunakan
NEWID
fungsi, seperti yang diilustrasikan oleh contoh berikut:Saat menjalankan kueri SQL yang disebutkan di SQL Server, kita akan mendapatkan set hasil berikut:
PostgreSQL
Pada PostgreSQL, Anda perlu menggunakan
random
fungsi, seperti yang diilustrasikan oleh contoh berikut:Saat menjalankan kueri SQL yang disebutkan di PostgreSQL, kita akan mendapatkan hasil sebagai berikut:
MySQL
Di MySQL, Anda perlu menggunakan
RAND
fungsinya, seperti yang diilustrasikan oleh contoh berikut:Saat menjalankan kueri SQL yang disebutkan di MySQL, kita akan mendapatkan hasil sebagai berikut:
sumber
Jika Anda menggunakan tabel besar dan ingin mengakses 10 persen dari data kemudian jalankan perintah berikut ini:
SELECT TOP 10 PERCENT * FROM Table1 ORDER BY NEWID();
sumber