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

MySQL - एक कॉलम का चयन करना जो ग्रुप बाय में नहीं है

यह सच है कि यह सुविधा कुछ अस्पष्ट प्रश्नों की अनुमति देती है, और चुपचाप उस कॉलम से चुने गए एक मनमाना मूल्य के साथ परिणाम सेट लौटाती है। व्यवहार में, यह उस समूह के भीतर पंक्ति से मान होता है जिसे पहले भौतिक रूप से संग्रहीत किया जाता है।

ये प्रश्न अस्पष्ट नहीं हैं यदि आप केवल उन स्तंभों का चयन करते हैं जो समूह द्वारा मानदंड में कॉलम पर कार्यात्मक रूप से निर्भर हैं। दूसरे शब्दों में, यदि प्रति मान "अस्पष्ट" कॉलम का केवल एक विशिष्ट मान हो सकता है जो समूह को परिभाषित करता है, तो कोई समस्या नहीं है। यह क्वेरी Microsoft SQL सर्वर (और ANSI SQL) में अवैध होगी, भले ही यह तार्किक रूप से अस्पष्टता का परिणाम न हो:

SELECT AVG(table1.col1), table1.personID, persons.col4
FROM table1 JOIN persons ON (table1.personID = persons.id)
GROUP BY table1.personID;

साथ ही, MySQL के पास मानक के अनुसार व्यवहार करने के लिए एक SQL मोड है:ONLY_FULL_GROUP_BY

FWIW, SQLite भी इन अस्पष्ट ग्रुप बाय क्लॉज की अनुमति देता है, लेकिन यह अंतिम से मान चुनता है समूह में पंक्ति।

कम से कम मेरे द्वारा परीक्षण किए गए संस्करण में। मनमाना होने का क्या अर्थ है यह है कि या तो MySQL या SQLite भविष्य में अपने कार्यान्वयन को बदल सकते हैं, और कुछ अलग व्यवहार कर सकते हैं। इसलिए आपको उस व्यवहार पर भरोसा नहीं करना चाहिए जिस तरह से वे वर्तमान में इस तरह के अस्पष्ट मामलों में हैं। अपने प्रश्नों को नियतात्मक और अस्पष्ट नहीं होने के लिए फिर से लिखना बेहतर है। इसलिए MySQL 5.7 अब डिफ़ॉल्ट रूप से ONLY_FULL_GROUP_BY को सक्षम करता है।



  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 IN खंड में अल्पविराम से अलग किए गए मान

  2. MySQL, दो स्तंभों को संयोजित करें

  3. ClusterControl के साथ अपने MySQL और MariaDB बैकअप को कैसे अनुकूलित करें

  4. ROW_NUMBER () MySQL में

  5. मैं डोकर कंटेनर में स्कीमा के साथ एक MySQL डेटाबेस को कैसे प्रारंभ कर सकता हूं?