Як вибрати найдовший "рядок" із таблиці при групуванні?


90

Приклад:

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

WHERE [something]

GROUP BY partnumber, manufacturer, condition

У мене є кілька описів, які є порожніми, і може бути багато номерів, виробника, значень стану, і для групи, здається, береться перший доступний опис, який може бути порожнім. Мені подобається отримувати найдовший доступний опис.

я спробував це:

MAX(LENGTH(description)) 

однак це повертає кількість символів у рядку. Чи можна зробити те, що я намагаюся зробити в MySQL?

Відповіді:


181

Спробуйте ORDER BY LENGTH(description) DESCвикористовувати, LIMIT 1щоб отримати лише найбільше.


25
ORDER BY LENGTH(description) DESC LIMIT 1

Це відсортує результати від найдовшого до найкоротшого та дасть перший результат (найдовший.)


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`

Мені здається "дорогим", під час роботи та написаного коду, для вибору одного запису. Я не думаю, що підзапит - найкращий спосіб вирішити проблему.
MJH

1
@rosa: ти маєш рацію щодо багатослів'я, хоча я не впевнений, що час продуктивності буде сильно відрізнятися (і для цього, і для ЗАМОВЛЕННЯ потрібно сортування файлів). Перевага цієї версії полягає в тому, що вона повертає всі записи максимальної довжини, а не лише один невизначений.
eggyal

@rosa: також, оглядаючись назад на це питання, я думаю, я розумів, що ОП хотіло отримати найдовший рядок у кожній групі, а не найдовший результат загалом.
eggyal

0

Здається, я відповів на власне запитання, MAX (опис), здається, працює чудово.


7
Це не дасть вам найдовшого опису, а саме опису, який є лексичним максимумом (тобто в алфавітному порядку). Однак, оскільки це впорядкування розміщує будь-який непустий опис після порожнього, воно завжди призводить до непустого опису, якщо такий існує: можливо, цього достатньо для ваших потреб?
eggyal

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.