आपको एग्रीगेट फंक्शन का इस्तेमाल करना होगा :
<ब्लॉकक्वॉट>एग्रीगेट फ़ंक्शन इनपुट वैल्यू के सेट से एकल परिणाम की गणना करते हैं।
SELECT col2, MIN(col3) AS col3, MIN(col1) AS col1
FROM the_table
GROUP BY col2;
<ब्लॉकक्वॉट> मानक SQL में, एक क्वेरी जिसमें GROUP BY क्लॉज़ शामिल है, उन चुनिंदा सूची में गैर-समेकित कॉलम को संदर्भित नहीं कर सकता है जिनका नाम GROUP BY क्लॉज़ में नहीं है
और:
<ब्लॉकक्वॉट>MySQL GROUP BY के उपयोग को बढ़ाता है ताकि चयन सूची गैर-समेकित कॉलम को संदर्भित कर सके जिसका नाम GROUP BY क्लॉज में नहीं है। इसका मतलब है कि पिछली क्वेरी MySQL में कानूनी है। आप अनावश्यक कॉलम सॉर्टिंग और ग्रुपिंग से बचकर बेहतर प्रदर्शन प्राप्त करने के लिए इस सुविधा का उपयोग कर सकते हैं। हालांकि, यह प्राथमिक रूप से तब उपयोगी होता है जब ग्रुप बाय में नामित प्रत्येक गैर-समेकित कॉलम में सभी मान प्रत्येक समूह के लिए समान होते हैं। सर्वर प्रत्येक समूह से कोई भी मान चुनने के लिए स्वतंत्र है, इसलिए जब तक वे समान न हों, चुने गए मान अनिश्चित होते हैं
तो स्पष्ट कुल फ़ंक्शन के बिना MySQL संस्करण के साथ आप अनिश्चित मूल्यों के साथ समाप्त हो सकते हैं। मैं विशिष्ट समग्र कार्य का उपयोग करने का दृढ़ता से सुझाव देता हूं।
संपादित करें:
GROUP BY की MySQL हैंडलिंग से :
<ब्लॉकक्वॉट>SQL92 और पूर्ववर्ती उन प्रश्नों की अनुमति नहीं देता जिनके लिए चयन सूची, HAVING शर्त, या ORDER BY सूची गैर-एकत्रित स्तंभों को संदर्भित करती है जिनका नाम GROUP BY खंड में नहीं है।
SQL99 और बाद में ऐसे गैर-समुच्चय प्रति वैकल्पिक सुविधा T301 की अनुमति देता है यदि वे कार्यात्मक रूप से GROUP BY कॉलम पर निर्भर हैं: यदि नाम और संरक्षक के बीच ऐसा संबंध मौजूद है, तो प्रश्न कानूनी है। यह मामला होगा, उदाहरण के लिए, ग्राहकों की प्राथमिक कुंजी को हिरासत में लिया गया था।
उदाहरण:
SELECT o.custid, c.name, MAX(o.payment)
FROM orders AS o
JOIN customers AS c
ON o.custid = c.custid
GROUP BY o.custid;