101 votes

Comment sélectionner la "chaîne" la plus longue dans un tableau lors d'un regroupement ?

Exemple :

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

WHERE [something]

GROUP BY partnumber, manufacturer, condition

J'ai quelques descriptions qui sont vides, et il peut y avoir plusieurs valeurs de numéro de pièce, de fabricant, de condition, et sur le groupe, il semble prendre la première description disponible, qui peut être vide. J'aimerais obtenir la description la plus longue disponible.

J'ai essayé ça :

MAX(LENGTH(description)) 

mais qui renvoie le nombre de caractères de la chaîne. Est-il possible de faire ce que j'essaie de faire avec MySQL ?

202voto

StilesCrisis Points 8388

Essayez ORDER BY LENGTH(description) DESC et utiliser LIMIT 1 pour n'obtenir que le plus gros.

28voto

Scott Nelson Points 51
ORDER BY LENGTH(description) DESC LIMIT 1

Cela triera les résultats du plus long au plus court et donnera le premier résultat (le plus long).

5voto

eggyal Points 60363
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`

3voto

Tushar Kesare Points 81

MAX(LENGTH(description)) renvoie la longueur de la plus longue valeur de la colonne Description.

1voto

Rubens Amaral Points 45

Si une "description" contient des caractères multi-idiom, il faut alors utiliser

MAX(CHAR_LENGTH(description))

Par exemple :

SELECT LENGTH(" ,       ")

Résultat : 89.

Considérant que :

SELECT CHAR_LENGTH(" ,       ")

Résultat : 49.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X