Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memilih Baris Secara Rawak daripada Jadual SQL dengan Kebarangkalian Berwajaran?

Bagaimana untuk Memilih Baris Secara Rawak daripada Jadual SQL dengan Kebarangkalian Berwajaran?

Susan Sarandon
Susan Sarandonasal
2025-01-01 13:08:10402semak imbas

How to Randomly Select a Row from a SQL Table with Weighted Probabilities?

Pemilihan Baris Rawak dengan Pertimbangan Berwajaran

SQL menyediakan cara untuk memilih baris secara rawak daripada jadual. Walau bagaimanapun, mengambil kira berat bagi setiap baris untuk mempengaruhi kebarangkalian pemilihan adalah tidak mudah.

Satu kaedah untuk mencapai ini ialah pensampelan takungan berwajaran, yang merupakan teknik yang elegan dan berkesan untuk memilih elemen daripada set dengan penggantian dan dengan kebarangkalian berkadar dengan beratnya.

Melaksanakan ini dalam SQL melibatkan:

  • Mengira skor keutamaan bagi setiap baris dengan membahagikan logaritma negatif nombor rawak dengan beratnya.
  • Isih baris mengikut skor keutamaan ini dalam tertib menaik.
  • Memilih baris pertama dalam diisih keputusan.

Pertanyaan ini mencapai ini:

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

Dalam pertanyaan ini, LOG(RAND()) menjana nombor rawak teragih seragam antara 0 dan 1. Mengambil logaritma negatif daripada nombor ini secara berkesan menyongsangkan nilainya, menghasilkan nombor yang lebih besar untuk nilai rawak yang lebih kecil. Dengan membahagikan nilai songsang ini dengan berat baris, kami memperoleh keutamaan yang lebih kecil untuk baris dengan pemberat yang lebih tinggi.

Akibatnya, baris dengan pemberat yang lebih tinggi akan mempunyai skor keutamaan yang lebih rendah dan berkemungkinan besar berada di bahagian atas daripada hasil yang diisih, dengan itu meningkatkan peluang mereka untuk dipilih. Pendekatan ini memastikan bahawa kebarangkalian pemilihan setiap baris adalah berkadar dengan beratnya.

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

Kenyataan:
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