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

only_full_group_by मोड के क्या लाभ हैं?

only_full_group_by =चालू MySQL इंजन को बताता है:लागू न करें GROUP BY जब आपको संदेह होता है कि क्या परिणाम दिखाना है और त्रुटि फेंकना है। केवल इसे लागू करें यदि Group By आपको विशेष रूप से बताता है कि क्या करना है। यानी जब Group By पूर्ण और परिपूर्ण है!

only_full_group_by =off MySQL इंजन को बताता है:हमेशा GROUP BY लागू करें और अगर आपको इस बारे में संदेह है कि क्या परिणाम चुनना है, तो बस एक यादृच्छिक रूप से चुनें!

यदि आप GROUP BY का उपयोग करते हैं, तो आपको इसे बंद करने की आवश्यकता नहीं है ठीक से!

उदाहरण:

तालिका:उपयोगकर्ता

 id   |  name
----------------
  1      ali
  2      john
  3      ali

जब आप GROUP BY . का उपयोग करते हैं name . पर कॉलम:

SELECT * FROM users GROUP BY name;

दो संभावित परिणाम हैं:

  1      ali
  2      john     

या

  2      john     
  3      ali

MYSQL नहीं जानता कि क्या परिणाम चुनना है! क्योंकि अलग-अलग id हैं s लेकिन दोनों में name=ali है ।

समाधान1:

केवल name . का चयन करना फ़ील्ड:

SELECT name FROM users GROUP BY name;

परिणाम:

  ali
  john     

यह एक अचूक उपाय है। GROUP BY . बनाने वाले स्तंभों को हटाना अस्पष्ट। इसका मतलब है कि आप जानते हैं कि आप क्या कर रहे हैं। आमतौर पर, आपको
उन स्तंभों की आवश्यकता नहीं होती है, लेकिन यदि आपको उनकी आवश्यकता है, तो समाधान3 पर जाएं !

समाधान2:

only_full_group_by को बंद किया जा रहा है . MYSQL दो संभावित परिणामों में से एक को चुनेगा रैंडमली !! (यह ठीक है यदि आप वास्तव में परवाह नहीं करते हैं कि id यह चुनेगा, लेकिन याद रखें कि इसे चालू करें आपकी क्वेरी के तुरंत बाद भविष्य के groupBys में अप्रत्याशित व्यवहार को रोकने के लिए)

समाधान3

एक Aggregate का उपयोग करें MIN() की तरह कार्य करें , MAX() MYSQL को यह तय करने में मदद करने के लिए कि उसे क्या चुनना चाहिए।

उदाहरण के लिए:

SELECT MAX(id), name FROM users GROUP BY name;

परिणाम:

  2      john     
  3      ali

यह ali . को चुनेगा पंक्ति जिसमें अधिकतम id . है ।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. समूह द्वारा खंड के साथ SQL अद्यतन क्वेरी

  2. MySQL में एकाधिक अपडेट

  3. Doctrine2 (Symfony2) में केस द्वारा ऑर्डर कैसे करें

  4. ini_set('max_execution_time', 0) का उपयोग करने पर;

  5. गलत mysql कॉन्फ़िगरेशन के साथ रूट पासवर्ड रीसेट करें