यह एक बहुत अच्छा सवाल है। मैंने पहले से ही कुछ उपयोगी उत्तर यहां पढ़े हैं, लेकिन शायद मैं अधिक सटीक स्पष्टीकरण जोड़ सकता हूं।
जब तक आप अतिरिक्त जानकारी को क्वेरी नहीं करते, तब तक ग्रुप बाय स्टेटमेंट के साथ क्वेरी परिणामों की संख्या कम करना आसान होता है। मान लें कि आपको निम्न तालिका 'स्थान' मिल गए हैं।
--country-- --city--
France Lyon
Poland Krakow
France Paris
France Marseille
Italy Milano
अब सवाल है
SELECT country FROM locations
GROUP BY country
में परिणाम होगा:
--country--
France
Poland
Italy
हालाँकि, निम्नलिखित क्वेरी
SELECT country, city FROM locations
GROUP BY country
... एमएस एसक्यूएल में एक त्रुटि फेंकता है, क्योंकि आपका कंप्यूटर कैसे जान सकता है कि तीन फ्रांसीसी शहरों "ल्योन", "पेरिस" या "मार्सिले" में से कौन सा क्षेत्र "फ्रांस" के दाईं ओर पढ़ना चाहते हैं?
दूसरी क्वेरी को सही करने के लिए, आपको इस जानकारी को जोड़ना होगा। ऐसा करने का एक तरीका सभी उम्मीदवारों में से सबसे बड़े या सबसे छोटे मूल्य का चयन करते हुए मैक्स () या MIN () फ़ंक्शन का उपयोग करना है। MAX () और MIN () न केवल संख्यात्मक मानों पर लागू होते हैं, बल्कि स्ट्रिंग मानों के वर्णमाला क्रम की भी तुलना करते हैं।
SELECT country, MAX(city) FROM locations
GROUP BY country
में परिणाम होगा:
--country-- --city--
France Paris
Poland Krakow
Italy Milano
या:
SELECT country, MIN(city) FROM locations
GROUP BY country
में परिणाम होगा:
--country-- --city--
France Lyon
Poland Krakow
Italy Milano
जब तक आप वर्णमाला (या संख्यात्मक) क्रम के दोनों सिरों से अपने मूल्य का चयन करने के साथ ठीक हैं तब तक ये फ़ंक्शन एक अच्छा समाधान हैं। लेकिन अगर यह मामला नहीं है तो क्या होगा? हमें मान लें कि आपको एक निश्चित विशेषता के साथ एक मूल्य की आवश्यकता है, उदाहरण के लिए 'एम' अक्षर से शुरू करना। अब चीजें जटिल हो गई हैं।
एकमात्र उपाय जो मैं अब तक पा सकता था, वह यह है कि आप अपनी पूरी क्वेरी को एक सबक्वेरी में डाल दें, और इसके द्वारा अतिरिक्त कॉलम का निर्माण करें:
SELECT
countrylist.*,
(SELECT TOP 1 city
FROM locations
WHERE
country = countrylist.country
AND city like 'M%'
)
FROM
(SELECT country FROM locations
GROUP BY country) countrylist
में परिणाम होगा:
--country-- --city--
France Marseille
Poland NULL
Italy Milano
SELECT DISTINCT * FROM table
आपके लिए काम क्यों नहीं करता है?