-
हां। गैर-एकत्रित स्तंभ कोई भी स्तंभ है जो
MAX
जैसे एकत्रीकरण फ़ंक्शन का उपयोग नहीं करता है ,COUNT
,SUM
,GROUP_CONCAT
, आदि. -
कॉलम
a
कार्यात्मक रूप से कॉलमb
. पर निर्भर है अगरb
. का मानa
. का एक विशेष मान दर्शाता है . इसका आम तौर पर मतलब है किb
तालिका के लिए एक अद्वितीय कुंजी है, औरa
उस तालिका में कोई अन्य स्तंभ है। -
द्वारा विशिष्ट रूप से निर्धारित कार्यात्मक निर्भरता के समान है।
-
विकल्प यह होगा कि
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
. में सूचीबद्ध करना आवश्यक नहीं है ।