Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

प्रायिकता अवसर के आधार पर यादृच्छिक मान का चयन करें

आप rand() . का उपयोग करके ऐसा कर सकते हैं और फिर एक संचयी राशि का उपयोग करना। मान लें कि वे 100% तक जोड़ते हैं:

select t.*
from (select t.*, (@cumep := @cumep + chance) as cumep
      from t cross join
           (select @cumep := 0, @r := rand()) params
     ) t
where @r between cumep - chance and cumep
limit 1;

नोट:

  • rand() एक वैरिएबल को इनिशियलाइज़ करने के लिए सबक्वायरी में एक बार कॉल किया जाता है। rand() . को एकाधिक कॉल वांछनीय नहीं हैं।
  • इस बात की बहुत कम संभावना है कि यादृच्छिक संख्या दो मानों के बीच की सीमा पर होगी। limit 1 मनमाने ढंग से 1. चुनता है।
  • सबक्वायरी को रोककर इसे और अधिक कुशल बनाया जा सकता है जब cumep > @r
  • मानों का किसी विशेष क्रम में होना जरूरी नहीं है।
  • इसे उन अवसरों को संभालने के लिए संशोधित किया जा सकता है जहां योग 1 के बराबर नहीं है, लेकिन यह एक और प्रश्न होगा।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:पंक्तियों की संख्या गिनने का सबसे तेज़ तरीका

  2. एसक्यूएल क्या है? एक डेटाबेस क्या है? रिलेशनल डेटाबेस मैनेजमेंट सिस्टम्स (RDBMS) को प्लेन इंग्लिश में समझाया गया।

  3. एकाधिक होस्ट पर PHP साइट के सत्रों को संभालने का सबसे अच्छा तरीका क्या है?

  4. अज्ञात कॉलम '' 'फ़ील्ड सूची' में। जैंगो

  5. MySQL में संग्रहीत कार्यविधि बनाते समय SQL सिंटैक्स त्रुटि