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

mysql शीर्ष n अधिकतम मानों का चयन करें

n=2 के लिए आप

. कर सकते हैं
SELECT max(column1) m 
FROM table t
GROUP BY column2
UNION
SELECT max(column1) m
FROM table t
WHERE column1 NOT IN (SELECT max(column1) 
                      WHERE column2 = t.column2)

किसी भी n के लिए आप वर्णित दृष्टिकोणों का उपयोग कर सकते हैं यहां विभाजन पर रैंक अनुकरण करने के लिए।

संपादित करें:वास्तव में यह लेख आपको वही देगा जो आपको चाहिए।

मूल रूप से यह कुछ इस तरह है

SELECT t.*
FROM
   (SELECT grouper,
          (SELECT val 
           FROM table li
           WHERE li.grouper = dlo.grouper
           ORDER BY
                 li.grouper, li.val DESC
           LIMIT 2,1) AS mid
   FROM 
      (
      SELECT DISTINCT grouper
      FROM table
      ) dlo 
   ) lo, table t
WHERE t.grouper = lo.grouper
      AND t.val > lo.mid

grouper बदलें उस कॉलम के नाम के साथ जिसे आप समूहबद्ध करना चाहते हैं और val उस कॉलम के नाम के साथ जो मान रखता है।

यह पता लगाने के लिए कि यह वास्तव में कैसे कार्य करता है, सबसे आंतरिक क्वेरी से चरण-दर-चरण जाएं और उन्हें चलाएं।

साथ ही, थोड़ा सा सरलीकरण भी है - वह सबक्वेरी जो mid . को ढूंढती है यदि कुछ श्रेणी में पर्याप्त मान नहीं हैं तो NULL वापस आ सकता है, इसलिए उसमें से कुछ स्थिरांक के लिए COALESCE होना चाहिए जो तुलना में समझ में आता है (आपके मामले में यह वैल के डोमेन का न्यूनतम होगा, लेख में यह MAX है)।

संपादित करें2: मैं यह उल्लेख करना भूल गया कि यह LIMIT 2,1 है जो n (LIMIT n,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. मैं mysqldump से डंप फ़ाइल को कैसे पुनर्स्थापित करूं?

  2. Neo4j - Cypher का उपयोग करके एक नोड हटाएं

  3. MySQL में पंक्तियों को गतिशील रूप से कॉलम में कैसे स्थानांतरित करें

  4. डेबियन 5 (लेनी) पर phpMyAdmin के साथ MySQL प्रबंधित करें

  5. Php और jquery में लोकेशन फाइंडर स्क्रिप्ट के साथ भारत का पिनकोड डेटाबेस