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

प्रति समूह N परिणाम प्राप्त करने के लिए GROUP BY के भीतर LIMIT का उपयोग करना?

आप GROUP_CONCAT का उपयोग कर सकते हैं id . द्वारा समूहीकृत, सभी वर्षों को एक ही कॉलम में लाने के लिए समेकित कार्य और rate . द्वारा आदेशित किया गया :

SELECT   id, GROUP_CONCAT(year ORDER BY rate DESC) grouped_year
FROM     yourtable
GROUP BY id

परिणाम:

-----------------------------------------------------------
|  ID | GROUPED_YEAR                                      |
-----------------------------------------------------------
| p01 | 2006,2003,2008,2001,2007,2009,2002,2004,2005,2000 |
| p02 | 2001,2004,2002,2003,2000,2006,2007                |
-----------------------------------------------------------

और फिर आप FIND_IN_SET<का उपयोग कर सकते हैं /ए> , जो दूसरे तर्क के अंदर पहले तर्क की स्थिति लौटाता है, उदाहरण के लिए।

SELECT FIND_IN_SET('2006', '2006,2003,2008,2001,2007,2009,2002,2004,2005,2000');
1

SELECT FIND_IN_SET('2009', '2006,2003,2008,2001,2007,2009,2002,2004,2005,2000');
6

GROUP_CONCAT . के संयोजन का उपयोग करना और FIND_IN_SET , और find_in_set द्वारा लौटाई गई स्थिति के आधार पर फ़िल्टर करने पर, आप इस क्वेरी का उपयोग कर सकते हैं जो प्रत्येक आईडी के लिए केवल पहले 5 वर्ष लौटाती है:

SELECT
  yourtable.*
FROM
  yourtable INNER JOIN (
    SELECT
      id,
      GROUP_CONCAT(year ORDER BY rate DESC) grouped_year
    FROM
      yourtable
    GROUP BY id) group_max
  ON yourtable.id = group_max.id
     AND FIND_IN_SET(year, grouped_year) BETWEEN 1 AND 5
ORDER BY
  yourtable.id, yourtable.year DESC;

कृपया फिडल देखें यहां

कृपया ध्यान दें कि यदि एक से अधिक पंक्तियों में समान दर हो सकती है, तो आपको वर्ष कॉलम के बजाय दर कॉलम पर GROUP_CONCAT(DISTINCT दर ORDER BY दर) का उपयोग करने पर विचार करना चाहिए।

GROUP_CONCAT द्वारा लौटाई गई स्ट्रिंग की अधिकतम लंबाई सीमित है, इसलिए यदि आपको प्रत्येक समूह के लिए कुछ रिकॉर्ड चुनने की आवश्यकता है तो यह अच्छी तरह से काम करता है।



  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 पर @GeneratedValue बहुरूपी सार सुपरक्लास

  4. COUNT(*) के आधार पर फ़िल्टर करें?

  5. MySQL में DATETIME फ़ील्ड से केवल दिनांक का चयन कैसे करें?