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

समूहीकृत SQL परिणामों के प्रत्येक समूह के लिए अधिकतम मान वाले रिकॉर्ड प्राप्त करें

सही समाधान है:

SELECT o.*
FROM `Persons` o                    # 'o' from 'oldest person in group'
  LEFT JOIN `Persons` b             # 'b' from 'bigger age'
      ON o.Group = b.Group AND o.Age < b.Age
WHERE b.Age is NULL                 # bigger age not found

यह कैसे काम करता है:

यह o . की प्रत्येक पंक्ति से मेल खाता है b . की सभी पंक्तियों के साथ कॉलम Group . में समान मान वाले और कॉलम में एक बड़ा मान Age . o . से कोई भी पंक्ति कॉलम Age . में अपने समूह का अधिकतम मान नहीं होना b . की एक या अधिक पंक्तियों से मेल खाएगा ।

LEFT JOIN NULL से भरी एक पंक्ति के साथ यह समूह के सबसे बुजुर्ग व्यक्ति (उनके समूह में अकेले रहने वाले व्यक्तियों सहित) से मेल खाता है b . से s ('समूह में कोई सबसे बड़ी उम्र नहीं')।
INNER JOIN का उपयोग करना इन पंक्तियों को मेल नहीं खाता और उन्हें अनदेखा कर दिया जाता है।

WHERE क्लॉज केवल NULL वाली पंक्तियों को रखता है b . से निकाले गए फ़ील्ड में s . वे प्रत्येक समूह के सबसे बुजुर्ग व्यक्ति हैं।

आगे की रीडिंग

इस समाधान और कई अन्य को पुस्तक में समझाया गया है SQL एंटीपैटर्न:डेटाबेस प्रोग्रामिंग के नुकसान से बचना



  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 में INDEX, PRIMARY, UNIQUE, FULLTEXT के बीच अंतर?

  3. एकाधिक खोज स्ट्रिंग के साथ MySQL find_in_set

  4. कमांड लाइन का उपयोग करके डेटाबेस कैसे आयात करें

  5. SQL कॉलम में सबसे अधिक बार आने वाला मान ज्ञात करें