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

एसक्यूएल में पक्षपातपूर्ण यादृच्छिक?

आपको प्रति पंक्ति एक यादृच्छिक संख्या उत्पन्न करने और उसका वजन करने की आवश्यकता है।

इस मामले में, RAND(CHECKSUM(NEWID())) RAND . के "प्रति क्वेरी" मूल्यांकन के आसपास हो जाता है . फिर इसे बूस्ट द्वारा गुणा करें और परिणाम डीईएससी द्वारा ऑर्डर करें। SUM..OVER आपको पूरी तरह से बढ़ावा देता है

DECLARE @sample TABLE (id int, boost int)

INSERT @sample VALUES (1, 1), (2, 2), (3, 7)

SELECT
    RAND(CHECKSUM(NEWID())) * boost  AS weighted,
    SUM(boost) OVER () AS boostcount,
    id
FROM
    @sample
GROUP BY
    id, boost
ORDER BY
    weighted DESC

यदि आपके पास बेतहाशा अलग-अलग बूस्ट मान हैं (जो मुझे लगता है कि आपने उल्लेख किया है), तो मैं वितरण को सुचारू करने के लिए लॉग (जो कि आधार ई है) का उपयोग करने पर भी विचार करूंगा।

अंत में, ORDER BY NEWID() एक यादृच्छिकता है जो बढ़ावा का कोई हिसाब नहीं लेगा। यह रैंड को सीड करने के लिए उपयोगी है लेकिन अपने आप नहीं।

यह नमूना SQL Server 2008, BTW पर एक साथ रखा गया था



  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. PHP दिनांक रूपांतरण के बाद '1970-01-01' दिखा रहा है

  3. MySQL में दृश्य अद्यतन कर रहा है

  4. MySQL का अनुवाद SQL सर्वर सिंटैक्स में शामिल करें?

  5. SQL - बाएँ 2 विदेशी कुंजियों को 1 प्राथमिक कुंजी से मिलाएँ