Maison > base de données > tutoriel mysql > Comment sélectionner aléatoirement une ligne dans une table SQL avec des probabilités pondérées ?

Comment sélectionner aléatoirement une ligne dans une table SQL avec des probabilités pondérées ?

Susan Sarandon
Libérer: 2025-01-01 13:08:10
original
387 Les gens l'ont consulté

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

Sélection aléatoire de lignes avec considération pondérée

SQL fournit un moyen de sélectionner aléatoirement une ligne dans une table. Cependant, prendre en compte un poids pour chaque ligne pour influencer la probabilité de sélection n'est pas simple.

Une méthode pour y parvenir est l'échantillonnage pondéré en réservoir, qui est une technique élégante et efficace pour sélectionner des éléments d'un ensemble avec remplacement. et avec des probabilités proportionnelles à leurs poids.

L'implémentation en SQL implique :

  • Calculer un score de priorité pour chaque ligne en divisant le logarithme négatif d'un nombre aléatoire par son poids.
  • Tri des lignes par ce score de priorité par ordre croissant.
  • Sélection de la première ligne dans les résultats triés.

Cette requête accomplit ceci :

SELECT
  id,
  -LOG(RAND()) / weight AS priority
FROM
  your_table
ORDER BY priority
LIMIT 1;
Copier après la connexion

Dans cette requête, LOG(RAND()) génère un résultat aléatoire uniformément distribué nombre compris entre 0 et 1. Prendre le logarithme négatif de ce nombre inverse effectivement sa valeur, ce qui donne un nombre plus grand pour des valeurs aléatoires plus petites. En divisant cette valeur inversée par le poids de la ligne, nous obtenons une priorité plus faible pour les lignes avec des poids plus élevés.

Par conséquent, les lignes avec des poids plus élevés auront un score de priorité plus faible et auront plus de chances d'être en haut des résultats triés, augmentant ainsi leurs chances d'être sélectionnés. Cette approche garantit que la probabilité de sélection de chaque ligne est proportionnelle à son poids.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal