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

Pilih baris acak dari tabel PostgreSQL dengan probabilitas baris tertimbang

Ini akan berhasil:

WITH CTE AS (
    SELECT random() * (SELECT SUM(percent) FROM YOUR_TABLE) R
)
SELECT *
FROM (
    SELECT id, SUM(percent) OVER (ORDER BY id) S, R
    FROM YOUR_TABLE CROSS JOIN CTE
) Q
WHERE S >= R
ORDER BY id
LIMIT 1;

Sub-kueri Q memberikan hasil sebagai berikut:

1  50
2  85
3  100

Kami kemudian cukup menghasilkan nomor acak dalam rentang [0, 100) dan memilih baris pertama yang berada pada atau di luar nomor itu (WHERE ayat). Kami menggunakan ekspresi tabel umum (WITH ) untuk memastikan nomor acak dihitung hanya sekali.

BTW, SELECT SUM(percent) FROM YOUR_TABLE memungkinkan Anda untuk memiliki bobot dalam percent - tidak harus berupa persentase (yakni ditambahkan hingga 100).

[Fiddle SQL]



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara memperbarui ID urutan postgreSQL secara massal untuk semua tabel

  2. Bergabunglah dengan Kolom Alias ​​​​SQL

  3. Pencocokan partisi tingkat lanjut untuk penggabungan partisi

  4. Apa cara yang tepat untuk menggunakan modul postgresql node.js?

  5. Postgres:bagaimana Anda membulatkan stempel waktu ke atas atau ke bawah ke menit terdekat?