nasıl

2012-06-04 16 views
56

Örnek gruplama zaman bir tablodan en uzun 'dizesini' seçerim Boş olabilecek ilk açıklamayı alacağa benziyor. Mevcut en uzun tanımı almak istiyorum. nasıl

denedim bu:

MAX(LENGTH(description)) 

ancak dizesindeki karakter sayısını döndürür. MySQL'de yapmaya çalıştığım şeyi yapmak mümkün mü?

cevap

110

Yalnızca en büyük boyutu almak için ORDER BY LENGTH(description) DESC'u kullanın ve LIMIT 1'u kullanın.

0

Kendi sorumu cevapladım galiba MAX (açıklama) gayet iyi çalışıyor gibi görünüyor.

+6

sözcük tanımındaki doğrusu size * En uzun * açıklamasına vermeyecektir O ilk sonucu vermek en uzun sonuçlarını sıralanır maksimum (örneğin alfabetik sırayla). Bununla birlikte, bu sipariş boş olmayanlardan sonra boş olmayan herhangi bir açıklama getireceğinden, varsa, her zaman boş olmayan bir açıklamaya neden olacaktır: belki de bu ihtiyaçlarınız için yeterlidir? – eggyal

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` 
+0

Bu, bir kaydın seçilmesi için çalışma zamanında ve yazılı kodda 'pahalı' gibi görünüyor. Bir alt sorgunun sorunu çözmenin en iyi yolu olduğunu sanmıyorum. – MJH

+1

@rosa: Verim hakkı hakkında haklısınız, ancak performans süresinin büyük ölçüde farklı olacağından emin değilim (hem bu hem de ORDER BY dosyası gerektirir). Bu sürümün avantajı, sadece tek bir belirsiz olan değil, maksimum uzunluktaki tüm kayıtları döndürmesidir. – eggyal

+0

@rosa: Ayrıca, bu soruya tekrar baktığımda, benim düşüncem, OP'nin her gruptaki en uzun diziyi genel olarak en uzun sonuçtan ziyade elde etmek istediğini düşünüyorum. – eggyal

10
ORDER BY LENGTH(description) DESC LIMIT 1 

Bu kısaya ve (en uzun.)