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

mysql - दो सीमाओं की आवश्यकता है?

आपको इसे प्रति जिले में "रैंक" लागू करके करना होगा, फिर केवल ग्रैब प्रति रैंक =1... जॉइन लोकेशन पर @LastDistrict शून्य पर डिफ़ॉल्ट है, अगर जिला आईडी पर आधारित है। यदि जिला चार आधारित है, तो आप डेटा प्रकार से मिलान करने के बजाय इसे बस ="" में बदल सकते हैं।

क्या हो रहा है यह स्पष्ट करने के लिए। "पुरस्कारों की संख्या" पूर्व प्रश्न प्रति जिले और सदस्य के लिए पूरी क्वेरी करता है, हालांकि कई पुरस्कार मायने रखता है। फिर, जिला और सदस्य पुरस्कार गणना (अवरोही) द्वारा आदेश दिया गया, इस प्रकार प्रति जिले में पहले स्थान पर सर्वोच्च पुरस्कार गणना डाल दी गई।

यह एक और फर्जी उपनाम "SQLVars" में शामिल हो गया है जो @RankSeq और @LastDistrict नामक क्वेरी में इनलाइन चर बनाता है। तो, पहली बार, "DistRankSeq" पहले जिले के लिए 1 बन जाएगा, फिर जिले के मूल्य के साथ "@LastDistrict" को प्रमुख बना देगा। उसी जिले के लिए अगली प्रविष्टि (चूंकि यह उचित क्रम क्रम में होगी) को 2 रैंक दी जाएगी, फिर 3, आदि ... परीक्षण किया जाता है, तो रैंक वापस 1 पर सेट हो जाती है और फिर से शुरू हो जाती है। तो आपके पास एक जिला हो सकता है जिसमें 100 सदस्य हों, दूसरा 5 के साथ, दूसरा 17 के साथ...

तो, आपकी अंतिम क्वेरी में वे सभी अपने-अपने रैंक के साथ हैं... अब, HAVING the final District रैंक =1 लागू करें... ऐसा करने से, आप प्रति जिले में शीर्ष 3 सदस्यों को प्राप्त करने के लिए होने को समायोजित कर सकते हैं (उदाहरण के लिए) )...

select
      AwardCounts.District,
      AwardCounts.MemberName,
      AwardCounts.memberAwards,
      @RankSeq := if( @LastDistrict = AwardCounts.District, @RankSeq +1, 1 ) DistRankSeq,
      @LastDistrict := AwardCounts.District as ignoreIt
   from
      ( select 
              a.district,
              a.membername,
              count(*) as memberAwards
           from
              Awards a
           group by
              a.district,
              a.membername
           order by
              a.district,
              memberAwards desc ) AwardCounts

      JOIN (select @RankSeq := 0, @LastDistrict = 0 ) SQLVars
   HAVING
      DistRankSeq = 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. एक MySQL डेटाबेस बनाएँ

  3. MySQL INSERT IF (कस्टम अगर स्टेटमेंट)

  4. 'System.Byte[]' टाइप करने के लिए 'System.DBNull' प्रकार की वस्तु डालने में असमर्थ।

  5. जांचें कि PHP के माध्यम से MySQL तालिका में कॉलम मौजूद है या नहीं