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

MySQL Group By प्रत्येक प्रकार के शीर्ष N नंबर के साथ

SELECT  mo.Letter, md.Rank
FROM    (
        SELECT  DISTINCT letter
        FROM    mytable
        ) mo
JOIN    mytable md
ON      md.Letter >= mo.Letter
        AND md.Letter <= mo.Letter
        AND Rank <=
        COALESCE
                (
                (
                SELECT  Rank
                FROM    mytable mi
                WHERE   mi.letter = mo.letter
                ORDER BY
                        Rank
                LIMIT 1, 1
                ),
                0xFFFFFFFF
                )

आपको (Letter, Rank) . पर एक कंपोजिट इंडेक्स होना चाहिए (इस क्रम में)

इस निर्माण पर ध्यान दें:

md.Letter >= mo.Letter
AND md.Letter <= mo.Letter

केवल md.Letter = mo.Letter . के बजाय

यह Range checked for each record . को बाध्य करता है जो अधिक कुशल है।

इस लेख को मेरे ब्लॉग में देखें:

इसके बारे में अधिक जानकारी के लिए।



  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 में SUBDATE() बनाम DATE_SUB():क्या अंतर है?

  3. MySQL INSERT डेटा उचित डीबी में संग्रहीत नहीं होता है, केवल अस्थायी?

  4. कर्ल और पीएचपी 1 प्रदर्शित कर रहा है

  5. मैसकल क्वेरी त्रुटि - ऑटो सिक्के जोड़ें