यहां लंबी टिप्पणी करें;
हाँ, आप ऐसा नहीं कर सकते। इसके बारे में सोचें... यदि आपके पास ऐसी तालिका है:
Col1 Col2 Col3
A A 1
B A 2
C A 3
और आप केवल Col2
. के आधार पर समूह बना रहे हैं , जो एक पंक्ति में समूहबद्ध हो जाएगा... Col1
. का क्या होता है और Col3
? उन दोनों में 3 अलग-अलग पंक्ति मान हैं। आपका DBMS उन्हें कैसे प्रदर्शित करेगा?
Col1 Col2 Col3
A? A 1?
B? 2?
C? 3?
यही कारण है कि आपको सभी स्तंभों के आधार पर समूह बनाना होगा, या अन्यथा उन्हें एकत्रित या संयोजित करना होगा। (SUM()
,MAX()
, MIN()
, आदि..)
हमें दिखाएं कि आप परिणाम कैसे दिखाना चाहते हैं और मुझे यकीन है कि हम आपकी मदद कर सकते हैं।
संपादित करें - उत्तर:
सबसे पहले, अपना प्रश्न अपडेट करने के लिए धन्यवाद। आपकी क्वेरी में id
नहीं है लेकिन आपके अपेक्षित परिणाम मिलते हैं, इसलिए मैं प्रत्येक के लिए अलग से उत्तर दूंगा।
बिना id
आप जो करने जा रहे हैं उसे प्राप्त करने के लिए आपको अभी भी सभी स्तंभों द्वारा समूहित करने की आवश्यकता होगी। आइए इसके माध्यम से चलते हैं।
यदि आप बिना किसी समूह के अपनी क्वेरी चलाते हैं:
select col1, col2, col3 from table where col3='200'
आपको यह वापस मिल जाएगा:
+----------+-------------+-------+
| col1 | col2 | col3 |
+----------+-------------+-------+
| 1 | some text 1 | 200 |
| 2 | some text 1 | 200 |
| 5 | some text 1 | 200 |
| 1 | some text 1 | 200 |
+----------+-------------+-------+
तो अब आप केवल col1 = 1
. देखना चाहते हैं एक बार पंक्ति। लेकिन ऐसा करने के लिए, आपको सभी . को रोल करना होगा कॉलम ऊपर, इसलिए आपका डीबीएमएस जानता है कि उनमें से प्रत्येक के साथ क्या करना है। यदि आप केवल col1
. द्वारा समूहबद्ध करने का प्रयास करते हैं , आप डीबीएमएस एक त्रुटि के माध्यम से करेंगे क्योंकि आपने यह नहीं बताया कि col2
में अतिरिक्त डेटा के साथ क्या करना है और col3
:
select col1, col2, col3 from table where col3='200' group by col1 --Errors
+----------+-------------+-------+
| col1 | col2 | col3 |
+----------+-------------+-------+
| 1 | some text 1 | 200 |
| 2 | some text 1 | 200 |
| 5 | some text 1 | 200 |
| ? | some text 1?| 200? |
+----------+-------------+-------+
यदि आप सभी 3 के द्वारा समूहित करते हैं, तो आपका DBMS पूरी पंक्तियों (जो आप चाहते हैं) को एक साथ समूहित करना जानता है, और केवल एक बार डुप्लिकेट पंक्तियों को प्रदर्शित करेगा:
select col1, col2, col3 from table where col3='200' group by col1, col2, col3
+----------+-------------+-------+
| col1 | col2 | col3 |
+----------+-------------+-------+
| 1 | some text 1 | 200 |
| 2 | some text 1 | 200 | --Desired results
| 5 | some text 1 | 200 |
+----------+-------------+-------+
id
के साथ
अगर आप id
देखना चाहते हैं , आपको अपना DBMS बताना होगा जो id
प्रदर्शित करने के लिए। भले ही हम सभी स्तंभों के आधार पर समूहबद्ध हों, आपको अपने वांछित परिणाम नहीं मिलेंगे, क्योंकि id
कॉलम प्रत्येक पंक्ति को अलग बना देगा (वे अब एक साथ समूह नहीं करेंगे):
select id, col1, col2, col3 from table where col3='200' group by id, col1, col2, col3
+--------+----------+-------------+-------+
| id | col1 | col2 | col3 |
+--------+----------+-------------+-------+
| 2 | 1 | some text 1 | 200 | --id = 2
| 3 | 2 | some text 1 | 200 |
| 7 | 5 | some text 1 | 200 |
| 8 | 1 | some text 1 | 200 | --id = 8
+--------+----------+-------------+-------+
इसलिए इन पंक्तियों को समूहबद्ध करने के लिए, हमें स्पष्ट रूप से यह बताना होगा कि id
. के साथ क्या करना है एस। अपने वांछित परिणामों के आधार पर, आप id = 2
. चुनना चाहते हैं , जो कि न्यूनतम . है id
, तो चलिए MIN()
use का उपयोग करते हैं :
select MIN(id), col1, col2, col3 from table where col3='200' group by col1, col2, col3
--Note, MIN() is an aggregate function, so id need not be in the group by
जो आपके वांछित परिणाम देता है (id
. के साथ) ):
+--------+----------+-------------+-------+
| id | col1 | col2 | col3 |
+--------+----------+-------------+-------+
| 2 | 1 | some text 1 | 200 |
| 3 | 2 | some text 1 | 200 |
| 7 | 5 | some text 1 | 200 |
+--------+----------+-------------+-------+
अंतिम विचार
आपकी समस्या की दो पंक्तियाँ ये थीं:
+--------+----------+-------------+-------+
| id | col1 | col2 | col3 |
+--------+----------+-------------+-------+
| 2 | 1 | some text 1 | 200 |
| 8 | 1 | some text 1 | 200 |
+--------+----------+-------------+-------+
जब भी आप इन्हें हिट करें, तो बस इस बारे में सोचें कि आप प्रत्येक कॉलम को एक-एक करके क्या करना चाहते हैं। आपको सभी को संभालना होगा जब भी आप ग्रुपिंग या एग्रीगेट करते हैं तो कॉलम।
id
, आप केवलid = 2
see देखना चाहते हैं , जो किMIN()
हैco1
, आप केवल विशिष्ट मान देखना चाहते हैं, इसलिएGROUP BY
col2
, आप केवल विशिष्ट मान देखना चाहते हैं, इसलिएGROUP BY
col3
, आप केवल विशिष्ट मान देखना चाहते हैं, इसलिएGROUP BY