¿Cómo selecciono la 'cadena' más larga de una tabla al agrupar


90

Ejemplo:

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

WHERE [something]

GROUP BY partnumber, manufacturer, condition

Tengo algunas descripciones que están en blanco, y puede haber muchos números de pieza, fabricante, valores de condición, y en el grupo parece tener la primera descripción disponible, que puede estar en blanco. Me gustaría obtener la descripción más larga disponible.

intenté esto:

MAX(LENGTH(description)) 

sin embargo, devuelve el número de caracteres de la cadena. ¿Es posible hacer lo que estoy tratando de hacer en MySQL?

Respuestas:


182

Prueba ORDER BY LENGTH(description) DESCy usa LIMIT 1para obtener solo el más grande.


26
ORDER BY LENGTH(description) DESC LIMIT 1

Esto ordenará los resultados del más largo al más corto y dará el primer resultado (el más largo).


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`

Esto me parece "caro", en tiempo de ejecución y código escrito, para la selección de un registro. No creo que una subconsulta sea la mejor manera de manejar el problema.
MJH

1
@rosa: tiene razón sobre la verbosidad, aunque no estoy seguro de que el tiempo de rendimiento sea muy diferente (tanto esto como ORDER BY requieren ordenación de archivos). La ventaja de esta versión es que devuelve todos los registros de longitud máxima, no solo uno indeterminado.
eggyal

@rosa: también, mirando hacia atrás sobre esta pregunta, creo que entendí que el OP quería obtener la cadena más larga en cada grupo, en lugar del resultado más largo en general.
Eggyal

1

MAX (LENGTH (descripción)) devuelve la longitud del valor más largo en la columna Descripción.


0

Parece que respondí mi propia pregunta, MAX (descripción) parece funcionar bien.


7
Eso no le dará la descripción más larga , sino la descripción que es el máximo léxico (es decir, en un orden alfabético). Sin embargo, dado que ese orden colocará cualquier descripción no vacía después de las vacías, siempre dará como resultado una descripción no vacía si existe una: ¿quizás esto sea suficiente para sus necesidades?
eggyal
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.