2012-06-04 16 views
56

Beispiel Gruppierung:Wie wähle ich die längste ‚string‘ aus einer Tabelle, wenn

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

WHERE [something] 

GROUP BY partnumber, manufacturer, condition 

ich einige Beschreibungen, die leer sind, und es können viele Teilenummer, Hersteller, Zustandswerte und auf die Gruppe sein Es scheint die erste verfügbare Beschreibung zu verwenden, die leer sein kann. Ich möchte die längste verfügbare Beschreibung erhalten.

Ich habe versucht, dies:

MAX(LENGTH(description)) 

jedoch, dass die Anzahl der Zeichen in der Zeichenfolge zurückgibt. Ist es möglich zu tun, was ich in MySQL versuche?

Antwort

110

Versuchen Sie ORDER BY LENGTH(description) DESC und verwenden Sie LIMIT 1, um nur die größten zu erhalten.

0

Es scheint, ich habe meine eigene Frage beantwortet, MAX (Beschreibung) scheint gut zu funktionieren.

+6

Das werden Ihnen nicht geben * längste * Beschreibung, sondern die Beschreibung, die die lexikalischen ist maximal (dh in alphabetischer Reihenfolge). Da diese Reihenfolge jedoch eine nicht leere Beschreibung nach leeren setzt, wird sie immer zu einer nicht leeren Beschreibung führen, falls eine solche existiert: Vielleicht ist das für Ihre Bedürfnisse ausreichend? – 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

Das scheint mir zu "teuer", in Laufzeit und geschriebenem Code, für die Auswahl eines Datensatzes. Ich glaube nicht, dass eine Unterabfrage der beste Weg ist, um das Problem zu lösen. – MJH

+1

@rosa: Sie haben Recht mit der Ausführlichkeit, obwohl ich nicht sicher bin, ob die Ausführungszeit sehr unterschiedlich sein würde (sowohl dies als auch ORDER BY erfordern einen Dateisort). Der Vorteil dieser Version ist, dass sie alle Datensätze maximaler Länge zurückgibt, nicht nur einen einzelnen unbestimmten. – eggyal

+0

@rosa: Auch wenn ich auf diese Frage zurückblicke, glaube ich, dass das OP den längsten String in jeder Gruppe erhalten wollte, anstatt das längste Ergebnis insgesamt. – eggyal

10
ORDER BY LENGTH(description) DESC LIMIT 1 

Dies wird die Ergebnisse am längsten sortieren, um kürzesten und gibt das erste Ergebnis (längste.)

Verwandte Themen