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

MySQL 5.7 और only_full_group_by

  1. हां। गैर-एकत्रित स्तंभ कोई भी स्तंभ है जो MAX जैसे एकत्रीकरण फ़ंक्शन का उपयोग नहीं करता है , COUNT , SUM , GROUP_CONCAT , आदि.

  2. कॉलम a कार्यात्मक रूप से कॉलम b . पर निर्भर है अगर b . का मान a . का एक विशेष मान दर्शाता है . इसका आम तौर पर मतलब है कि b तालिका के लिए एक अद्वितीय कुंजी है, और a उस तालिका में कोई अन्य स्तंभ है।

  3. द्वारा विशिष्ट रूप से निर्धारित कार्यात्मक निर्भरता के समान है।

  4. विकल्प यह होगा कि GROUP BY . में सभी गैर-एकत्रित स्तंभों को सूचीबद्ध किया जाए सूची:GROUP BY a.Z, a.Y, a.X

इन सबका कारण यह है कि जब आप उन स्तंभों का चयन करते हैं जो GROUP BY में नहीं हैं सूची, वे समूहबद्ध पंक्तियों में मनमानी पंक्तियों से आएंगे। इससे कई सामान्य त्रुटियां होती हैं। उदाहरण के लिए, एक सामान्य गलती लिखना है:

SELECT user_id, MAX(timestamp), ip_address
FROM user_logins
GROUP BY user_id

और उम्मीद करें ip_address प्रत्येक उपयोगकर्ता के लिए नवीनतम लॉगिन का पता शामिल करने के लिए। लेकिन इसमें वास्तव में कोई भी . होगा उन्होंने जिन पतों से लॉग इन किया, उनमें से एक नहीं MAX(timestamp) . वाली पंक्ति से . देखें SQL एक कॉलम पर अधिकतम मान वाली केवल पंक्तियों का चयन करें ऐसा करने के सही तरीके के लिए।

कार्यात्मक निर्भरता अपवाद आमतौर पर जुड़ने के साथ उपयोगी होता है।

SELECT u.user_id, u.user_name, MAX(l.timestamp)
FROM users AS u
JOIN user_logins AS l ON u.user_id = l.user_id
GROUP BY u.user_id

चूंकि user_id users . की प्राथमिक कुंजी है तालिका, यह विशिष्ट रूप से user_name . निर्धारित करती है , इसलिए इसे स्पष्ट रूप से 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. ग्रुप बाय क्वेरी के साथ पंक्तियों की संख्या प्राप्त करना

  2. PostgreSQL में स्थानांतरित करने के बाद त्रुटि 'संबंध मौजूद नहीं है'

  3. वर्तमान आइटम आईडी के आसपास N पिछला और M अगला आइटम चुनें

  4. किसी अन्य तालिका के मानों के आधार पर कुल गणना ज्ञात करें

  5. MySQL में फुल आउटर जॉइन कैसे करें?