PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Postgresql SELECT acak dengan nilai unik

Bisakah pertanyaan Anda diubah menjadi:

"Untuk masing-masing dari sepuluh penyedia yang dipilih secara acak, temukan satu kesepakatan yang dipilih secara acak yang ditawarkan oleh penyedia itu" ?

Jika demikian, itu cukup memberi tahu Anda apa yang harus dilakukan. Anda memerlukan dua lapisan, satu pass untuk memilih sepuluh penyedia secara acak, lalu satu pass untuk memilih satu kesepakatan acak per penyedia.

Data dummy yang diberikan:

create table spam ( deal text, provider text );

insert into spam(deal,provider) 
SELECT prov_id||n::text, prov_id FROM (
    SELECT chr(x) AS prov_id from  generate_series(97, 92+26) x) y 
CROSS JOIN generate_series(1,10) n;

select provider FROM spam GROUP BY provider ORDER BY random() LIMIT 10;

Ini salah satu yang berfungsi:

SELECT
 (SELECT deal FROM spam WHERE spam.provider = sel_prov.provider ORDER BY random() LIMIT 1),
 sel_prov.provider
FROM (select provider FROM spam GROUP BY provider ORDER BY random() LIMIT 10) sel_prov;

... cukup banyak hanya dengan mengimplementasikan kalimat di atas sebagai SQL. Tidak tahu apakah itu cepat; Anda mendapatkan idenya.

Jika pengulangan kata di atas tidak benar, harap klarifikasi pertanyaan Anda dengan contoh data dan contoh, atau detail lebih lanjut dalam deskripsi Anda.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Perbedaan antara dua tanggal di postgresql

  2. IntegrityError:membedakan antara batasan unik dan bukan pelanggaran nol

  3. kolom users.id harus muncul di klausa GROUP BY atau digunakan dalam fungsi agregat

  4. Gambaran Umum Kolom yang Dihasilkan untuk PostgreSQL

  5. Bisakah saya membuat tabel di PostgreSQL secara otomatis dari file csv dengan header?