ฉันจะเลือก 'สตริง' ที่ยาวที่สุดจากตารางได้อย่างไรเมื่อจัดกลุ่ม


90

ตัวอย่าง:

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

WHERE [something]

GROUP BY partnumber, manufacturer, condition

ฉันมีคำอธิบายบางส่วนที่ว่างเปล่าและอาจมีจำนวนชิ้นส่วนผู้ผลิตค่าเงื่อนไขและในกลุ่มดูเหมือนว่าจะใช้คำอธิบายแรกที่มีอยู่ซึ่งสามารถเว้นว่างได้ Id ต้องการรับคำอธิบายที่ยาวที่สุด

ฉันลองสิ่งนี้:

MAX(LENGTH(description)) 

อย่างไรก็ตามจะส่งกลับจำนวนอักขระในสตริง เป็นไปได้ไหมที่จะทำในสิ่งที่ฉันพยายามทำใน MySQL

คำตอบ:



26
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: คุณพูดถูกเกี่ยวกับการใช้คำฟุ่มเฟือยแม้ว่าฉันไม่แน่ใจว่าเวลาในการแสดงจะแตกต่างกันมาก (ทั้งนี้และ ORDER BY ต้องใช้ไฟล์เรียงลำดับ) ข้อได้เปรียบของเวอร์ชันนี้คือส่งคืนระเบียนทั้งหมดที่มีความยาวสูงสุดไม่ใช่เพียงรายการเดียวที่ไม่แน่นอน
eggyal

@rosa: เมื่อมองย้อนกลับไปที่คำถามนี้ฉันคิดว่าความเข้าใจของฉันคือ OP ต้องการได้สตริงที่ยาวที่สุดในแต่ละกลุ่มแทนที่จะเป็นผลลัพธ์ที่ยาวที่สุดโดยรวม
eggyal


0

ดูเหมือนว่าฉันจะตอบคำถามของตัวเอง MAX (คำอธิบาย) ดูเหมือนจะใช้งานได้ดี


7
นั่นจะไม่ให้คำอธิบายที่ยาวที่สุดแก่คุณแทนที่จะเป็นคำอธิบายที่เป็นคำศัพท์สูงสุด (เช่นเรียงตามตัวอักษร) อย่างไรก็ตามเนื่องจากคำสั่งดังกล่าวจะวางคำอธิบายที่ไม่ว่างเปล่าไว้หลังคำอธิบายที่ว่างเปล่าจึงทำให้คำอธิบายไม่ว่างเปล่าเสมอหากมีอยู่: อาจเพียงพอสำหรับความต้องการของคุณ?
eggyal
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.