Jak wybrać najdłuższy „ciąg” z tabeli podczas grupowania

90

Przykład:

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

WHERE [something]

GROUP BY partnumber, manufacturer, condition

Mam kilka opisów, które są puste, i może być wiele numerów części, producenta, wartości warunków, a na grupie wydaje się, że przyjmuje pierwszy dostępny opis, który może być pusty. Chciałbym uzyskać najdłuższy dostępny opis.

próbowałem tego:

MAX(LENGTH(description)) 

jednak zwraca liczbę znaków w ciągu. Czy można zrobić to, co próbuję zrobić w MySQL?

user1336827
źródło

Odpowiedzi:

182

Spróbuj ORDER BY LENGTH(description) DESCi użyj, LIMIT 1aby uzyskać tylko największe.

StilesCrisis
źródło
26
ORDER BY LENGTH(description) DESC LIMIT 1

To posortuje wyniki od najdłuższych do najkrótszych i da pierwszy wynik (najdłuższy).

Scott Nelson
źródło
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`
jajeczny
źródło
Wydaje mi się, że jest to „drogie” pod względem czasu wykonywania i napisanego kodu, jeśli chodzi o wybór jednego rekordu. Nie sądzę, aby zapytanie podrzędne było najlepszym sposobem rozwiązania problemu.
MJH
1
@rosa: masz rację co do gadatliwości, chociaż nie jestem pewien, czy czas wykonania byłby znacznie inny (zarówno to, jak i ORDER BY wymagają sortowania plików). Zaletą tej wersji jest to, że zwraca wszystkie rekordy o maksymalnej długości, a nie tylko jeden nieokreślony.
eggyal
@rosa: również, patrząc wstecz na to pytanie, myślę, że rozumiem, że OP chciał uzyskać najdłuższy ciąg w każdej grupie, a nie najdłuższy wynik ogólny.
eggyal
1

MAX (LENGTH (opis)) zwraca długość najdłuższej wartości w kolumnie Opis.

Tushar Kesare
źródło
0

Wygląda na to, że odpowiedziałem na własne pytanie, MAX (opis) wydaje się działać dobrze.

user1336827
źródło
7
To nie da ci najdłuższego opisu, a raczej opis, który jest leksykalnym maksimum (tj. W kolejności alfabetycznej). Ponieważ jednak to uporządkowanie spowoduje umieszczenie dowolnego niepustego opisu po pustym opisie, zawsze będzie skutkować niepustym opisem, jeśli taki istnieje: może to wystarczy dla Twoich potrzeb?
Eggyal