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

भारित पंक्ति संभावनाओं के साथ PostgreSQL तालिका से यादृच्छिक पंक्ति का चयन करें

यह चाल चलनी चाहिए:

WITH CTE AS (
    SELECT random() * (SELECT SUM(percent) FROM YOUR_TABLE) R
)
SELECT *
FROM (
    SELECT id, SUM(percent) OVER (ORDER BY id) S, R
    FROM YOUR_TABLE CROSS JOIN CTE
) Q
WHERE S >= R
ORDER BY id
LIMIT 1;

उप-क्वेरी Q निम्नलिखित परिणाम देता है:

1  50
2  85
3  100

हम तब केवल [0, 100) की सीमा में एक यादृच्छिक संख्या उत्पन्न करते हैं और पहली पंक्ति चुनते हैं जो उस संख्या पर या उससे आगे होती है (WHERE खंड)। हम सामान्य तालिका अभिव्यक्ति का उपयोग करते हैं (WITH ) यह सुनिश्चित करने के लिए कि यादृच्छिक संख्या की गणना केवल एक बार की जाती है।

BTW, SELECT SUM(percent) FROM YOUR_TABLE आपको percent . में कोई भार रखने की अनुमति देता है - उन्हें सख्ती से प्रतिशत होने की आवश्यकता नहीं है (यानी 100 तक जोड़ें)।

[एसक्यूएल फिडल]



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एक स्ट्रिंग की जांच करने के लिए पोस्टग्रेज क्वेरी एक संख्या है

  2. समय क्षेत्र के बिना स्ट्रिंग को टाइमस्टैम्प में कैसे बदलें

  3. पोस्टग्रेएसक्यूएल बी-ट्री इंडेक्स पर नोट्स

  4. django.db.utils.OperationalError सर्वर से कनेक्ट नहीं हो सका

  5. PostgreSQL वापसी परिणाम JSON सरणी के रूप में सेट?