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

SQL प्रत्येक आयु के लिए 100 यादृच्छिक पंक्तियाँ लौटाता है

आप नीचे दिए गए उपयोगकर्ता परिभाषित चर का उपयोग कर सकते हैं, क्वेरी आपको प्रत्येक अलग-अलग उम्र के लिए एक रिकॉर्ड देगी, आंतरिक क्वेरी सिर्फ उसी उम्र के लिए जाँच कर रही है और उन्हें रैंक दे रही है जैसे 4 समान उम्र (आयु =1) रैंक 1,2,3 होगी ,4 और जब उम्र =2 तब रैंक संख्या फिर से 1 से शुरू होगी और जहां बाहरी क्वेरी का फ़िल्टर पंक्तियों को फ़िल्टर कर रहा है, जहां रैंक 1 है, इसलिए प्रत्येक अलग-अलग उम्र के लिए आपको एक पंक्ति मिलेगी और उन्हें बेतरतीब ढंग से ऑर्डर किया जाता है

SELECT  c.name, c.Gender, c.Age, c.MP, c.score
FROM (
SELECT i.name, i.Gender, i.Age, i.MP, b.score,
@r:= CASE WHEN @g = i.Age THEN @r + 1 ELSE 1 END rownum,
@g:=i.Age
FROM i
INNER JOIN b ON b.name=i.name
CROSS JOIN(SELECT @g:=NULL ,@r:=0) a
WHERE i.MP='F' AND i.gender='F' AND b.score<=-1
ORDER BY  i.Age, RAND()
) c
WHERE c.rownum = 1
ORDER BY c.Age
LIMIT 100

मान लीजिए कि आपकी सम्मिलित क्वेरी आपको परिणाम देती है

नमूना डेटा सेट

name   gender  Age  Mp score
============================
test1  male    1    1   10
test2  male    1    1   10
test3  male    1    1   10
test4  male    2    1   10
test5  male    2    1   10
test6  male    3    1   10
test7  male    4    1   10
test8  male    4    1   10
.....

अब मेरे उत्तर में आंतरिक क्वेरी का उपयोग करने से आपको नीचे दिए गए रैंक कॉलम के साथ परिणाम सेट मिलेंगे

आंतरिक क्वेरी परिणाम सेट

name   gender  Age  Mp score rank
==================================
test2  male    1    1   10    1
test1  male    1    1   10    2
test3  male    1    1   10    3
test4  male    2    1   10    1
test5  male    2    1   10    2
test6  male    3    1   10    1
test7  male    4    1   10    1
test8  male    4    1   10    2

जैसा कि उपरोक्त परिणाम सेट में आप देख सकते हैं कि उम्र =1 में 3 पंक्तियाँ हैं और उनकी रैंक अलग-अलग हैं 1,2,3 उम्र के लिए एक ही उदाहरण =2 रैंक उम्र के लिए 1,2 समान हैं =4, अब मेरे उत्तर में बाहरी क्वेरी होगी परिणाम को फ़िल्टर करें जहां रैंक =1 है, इसलिए अंतिम परिणाम सेट में प्रत्येक विशिष्ट के लिए एक पंक्ति होगी जैसा कि नीचे परिणाम सेट देखें

अंतिम आउटपुट

name   gender  Age  Mp score rank
==================================
test2  male    1    1   10    1
test4  male    2    1   10    1
test6  male    3    1   10    1
test7  male    4    1   10    1

रैंडम ऑर्डरिंग भाग आंतरिक क्वेरी पर किया जाता है क्योंकि आप ऑर्डर को ORDER BY i.Age, RAND() द्वारा देख सकते हैं। यह पहले आयु को आरोही क्रम में क्रमित करेगा और फिर समान आयु मानों के लिए यह परिणामों को बेतरतीब ढंग से क्रमित करेगा। आशा है कि यह समझ में आता है



  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. MySQL रहस्य:शून्य मान गैर-शून्य स्ट्रिंग से अलग नहीं है

  3. अक्षांश/देशांतर द्वारा MySQL क्वेरी को सॉर्ट करना

  4. स्प्रिंग ऐप 8 घंटे के बाद MySql से कनेक्शन खो रहा है। कैसे ठीक से कॉन्फ़िगर करें?

  5. स्प्रिंग-बूट वेब ऐप थोड़ी देर के बाद MySQL / RDS से कनेक्ट करने की क्षमता खो देता है