समूह बनाते समय मैं किसी तालिका से सबसे लंबी 'स्ट्रिंग' का चयन कैसे करूं


90

उदाहरण:

SELECT partnumber, manufacturer, condition, SUM(qty), AVG(price), description FROM parts

WHERE [something]

GROUP BY partnumber, manufacturer, condition

मेरे पास कुछ वर्णन हैं जो रिक्त हैं, और कई पार्टनंबर, निर्माता, स्थिति मान हो सकते हैं, और समूह पर यह पहला विवरण उपलब्ध लगता है, जो रिक्त हो सकता है। Id सबसे लंबा विवरण उपलब्ध कराना पसंद करते हैं।

मैंने यह कोशिश की:

MAX(LENGTH(description)) 

हालाँकि यह स्ट्रिंग में वर्णों की संख्या लौटाता है। क्या यह संभव है कि MySQL में कौन सी कोशिश कर रहा है?

जवाबों:


181

कोशिश करो ORDER BY LENGTH(description) DESCऔर LIMIT 1केवल सबसे बड़ा पाने के लिए उपयोग करें।


25
ORDER BY LENGTH(description) DESC LIMIT 1

यह परिणामों को सबसे लंबे से सबसे कम तक छांटेगा और पहला परिणाम (सबसे लंबा) देगा।


3
SELECT   partnumber, manufacturer, `condition`, SUM(qty), AVG(price), description
FROM     parts
WHERE    [something] AND LENGTH(description) = (
           SELECT MAX(LENGTH(description))
           FROM   parts AS p
           WHERE  p.partnumber   = parts.partnumber
              AND p.manufacturer = parts.manufacturer
              AND p.condition    = parts.condition
         )
GROUP BY partnumber, manufacturer, `condition`

यह मुझे लगता है कि 'महंगे' है, रनिंग टाइम और लिखित कोड में, एक रिकॉर्ड के चयन के लिए। मुझे नहीं लगता कि एक उप-क्वेरी समस्या को संभालने का सबसे अच्छा तरीका है।
MJH

1
@rosa: आप वर्बोसिटी के बारे में सही हैं, हालांकि मुझे यकीन नहीं है कि प्रदर्शन का समय बहुत अलग होगा (यह और आदेश दोनों द्वारा फाइल की आवश्यकता है)। इस संस्करण का लाभ यह है कि यह अधिकतम लंबाई के सभी रिकॉर्ड लौटाता है, न कि केवल एक अनिश्चित अनिश्चितता।
एग्यगल

@rosa: इस सवाल पर भी पीछे मुड़कर देखें, तो मुझे लगता है कि मेरी समझ यह थी कि ओपी समग्र रूप से सबसे लंबे परिणाम के बजाय प्रत्येक समूह में सबसे लंबी स्ट्रिंग प्राप्त करना चाहता था।

0

ऐसा लगता है कि मैंने अपने सवाल का जवाब दिया, मैक्स (विवरण) ठीक काम करने लगता है।


7
यह आपको सबसे लंबा विवरण नहीं देगा , बल्कि वह वर्णन जो लेक्सिकल मैक्सिमम है (यानी एक वर्णमाला क्रम में)। हालाँकि, चूंकि यह आदेश खाली होने के बाद किसी भी गैर-खाली विवरण को जगह देगा, तो यह हमेशा गैर-रिक्त विवरण में परिणाम देगा यदि कोई मौजूद है: शायद यह आपकी आवश्यकताओं के लिए पर्याप्त है?
अयंग्याल

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.