Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Memilih Baris Secara Rawak daripada Jadual dengan Kebarangkalian Berwajaran Menggunakan SQL?

Bagaimanakah Saya Boleh Memilih Baris Secara Rawak daripada Jadual dengan Kebarangkalian Berwajaran Menggunakan SQL?

Linda Hamilton
Lepaskan: 2024-12-26 06:55:15
asal
499 orang telah melayarinya

How Can I Randomly Select a Row from a Table with Weighted Probability Using SQL?

Pemilihan Baris Rawak dengan Kebarangkalian Berwajaran

Memandangkan jadual dengan id lajur, kandungan dan berat, tugasnya ialah memilih baris secara rawak sambil mengambil kira berat. Dalam senario di mana tiga baris wujud dengan berat masing-masing 60, 40 dan 100, cabarannya adalah untuk mengira kebarangkalian memilih setiap baris seperti berikut:

  • Baris 1: 30% peluang
  • Baris 2: 20% peluang
  • Baris 3: 50% peluang

Pensampelan Takungan Berwajaran

Pendekatan optimum untuk masalah ini ialah pensampelan takungan berwajaran, yang boleh memilih item dengan kebarangkalian yang berkadar dengan beratnya dengan berkesan. Begini cara untuk menerapkannya:

SELECT
  id,
  -LOG(RAND()) / weight AS priority
FROM
  your_table
ORDER BY priority
LIMIT 1;
Salin selepas log masuk

Pertanyaan SQL ini menggunakan logik berikut:

  • Ia menggandingkan setiap baris dengan keutamaannya, dikira sebagai logaritma negatif nombor rawak dibahagikan mengikut berat baris.
  • Mengisih baris mengikut keutamaan memastikan baris dengan pemberat yang lebih tinggi mempunyai peluang yang lebih besar untuk muncul di bahagian atas set keputusan.
  • Menghadkan keputusan kepada satu baris menghasilkan baris yang dipilih secara rawak dengan kebarangkalian berwajaran.

Teknik pensampelan takungan berwajaran ini boleh digunakan untuk memilih berbilang baris atau bahkan keseluruhan jadual dengan kebarangkalian berwajaran, menjadikannya penyelesaian serba boleh untuk pelbagai pemilihan data senario.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memilih Baris Secara Rawak daripada Jadual dengan Kebarangkalian Berwajaran Menggunakan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan