Come faccio a selezionare la "stringa" più lunga da una tabella durante il raggruppamento


90

Esempio:

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

WHERE [something]

GROUP BY partnumber, manufacturer, condition

Ho alcune descrizioni vuote e possono esserci molti numero di parte, produttore, valori di condizione e nel gruppo sembra prendere la prima descrizione disponibile, che può essere vuota. Vorrei ottenere la descrizione più lunga disponibile.

ho provato questo:

MAX(LENGTH(description)) 

tuttavia, restituisce il numero di caratteri nella stringa. È possibile fare quello che sto cercando di fare in MySQL?

Risposte:


182

Prova ORDER BY LENGTH(description) DESCe usa LIMIT 1per ottenere solo il più grande.


26
ORDER BY LENGTH(description) DESC LIMIT 1

Questo ordinerà i risultati dal più lungo al più breve e darà il primo risultato (il più lungo).


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`

Questo mi sembra "costoso", in termini di tempo di esecuzione e codice scritto, per la selezione di un record. Non credo che una sottoquery sia il modo migliore per gestire il problema.
MJH

1
@rosa: hai ragione sulla verbosità, anche se non sono sicuro che il tempo di esecuzione sarebbe molto diverso (sia questo che ORDER BY richiedono filesort). Il vantaggio di questa versione è che restituisce tutti i record di lunghezza massima, non solo uno indeterminato.
Eggyal

@rosa: inoltre, ripensando a questa domanda, penso che la mia comprensione fosse che l'OP voleva ottenere la stringa più lunga in ogni gruppo, piuttosto che il risultato più lungo in generale.
Eggyal

1

MAX (LENGTH (descrizione)) restituisce la lunghezza del valore più lungo nella colonna Descrizione.


0

Sembra che abbia risposto alla mia domanda, MAX (descrizione) sembra funzionare bene.


7
Questo non ti darà la descrizione più lunga , piuttosto la descrizione che è il massimo lessicale (cioè in ordine alfabetico). Tuttavia, poiché tale ordine posizionerà qualsiasi descrizione non vuota dopo quelle vuote, risulterà sempre in una descrizione non vuota se ne esiste una: forse questo è sufficiente per le tue esigenze?
eggyal
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.