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

only_full_group_by के साथ क्वेरी समूह को कैसे ठीक करें

यह MySQL उपयोगकर्ताओं के लिए एक सामान्य त्रुटि है। MySQL 5.7 में, डिफ़ॉल्ट रूप से डेटाबेस मानक शब्दार्थ को लागू करता है जिसे अधिकांश अन्य SQL डेटाबेस वर्षों से लागू कर रहे हैं।

नियम यह है कि आपकी चयन-सूची का प्रत्येक स्तंभ निम्न में से एक होना चाहिए:

  • ग्रुप बाय क्लॉज में नामित; यानी यह वही है जिसे आप समूहित कर रहे हैं।
  • मिन, MAX (), SUM (), GROUP_CONCAT (), आदि जैसे समग्र फ़ंक्शन के अंदर
  • कार्यात्मक रूप से उस कॉलम पर निर्भर करता है जिसके द्वारा आप समूहित कर रहे हैं (यह MySQL का मानक SQL व्यवहार का विस्तार है, और अन्य SQL डेटाबेस आवश्यक रूप से इसका समर्थन नहीं करते हैं)।

आपकी क्वेरी में (मैं आपके SELECT * . का विस्तार करूँगा ):

select user_id, feature_key, feature_value from user_features
where user_id = 1
group by feature_key

आप फीचर_की के आधार पर समूह बना रहे हैं, लेकिन इसका मतलब है कि अन्य कॉलम मेरे द्वारा ऊपर वर्णित नियमों का पालन नहीं करते हैं।

इसे ठीक करने का तरीका यहां दिया गया है:

select MAX(user_id), feature_key, GROUP_CONCAT(feature_value)
from user_features
where user_id = 1
group by feature_key

MAX(user_id) . का उपयोग करना बेमानी लग सकता है चूंकि WHERE क्लॉज कंडीशन के आधार पर केवल एक ही वैल्यू संभव है। लेकिन कोई नुकसान भी नहीं है। MIN(user_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. mysql पूर्ण पाठ खोज विफलता

  2. विभिन्न डेटाबेस में विदेशी कुंजी बाधा कैसे बनाए रखें?

  3. SQL में निरंतर पंक्तियों के लिए GROUP BY

  4. ब्लॉब को बाइट सरणी में बदलने का सबसे आसान तरीका

  5. संबंधपरक मॉडल के लिए Yii2 सक्रिय रिकॉर्ड में जॉइन का उपयोग कैसे करें?