Как выбрать самую длинную строку из таблицы при группировке


90

Пример:

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

WHERE [something]

GROUP BY partnumber, manufacturer, condition

У меня есть некоторые описания, которые пусты, и может быть много номеров деталей, производителей, значений условий, и в группе, кажется, используется первое доступное описание, которое может быть пустым. Я хотел бы получить как можно более длинное описание.

я пробовал это:

MAX(LENGTH(description)) 

однако это возвращает количество символов в строке. Можно ли делать то, что я пытаюсь сделать в MySQL?

Ответы:



26
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: вы правы насчет многословности, хотя я не уверен, что время производительности будет сильно отличаться (и для этого, и для ORDER BY требуется файловая сортировка). Преимущество этой версии в том, что она возвращает все записи максимальной длины, а не только одну неопределенную.
eggyal

@rosa: также, оглядываясь назад на этот вопрос, я думаю, что я понял, что OP хотел получить самую длинную строку в каждой группе, а не самый длинный результат в целом.
eggyal


0

Кажется, я ответил на свой вопрос, MAX (описание) работает нормально.


7
Это не даст вам самое длинное описание, а скорее описание, которое является лексическим максимумом (то есть в алфавитном порядке). Однако, поскольку при таком порядке любое непустое описание будет помещено после пустых, это всегда будет приводить к непустому описанию, если оно существует: возможно, этого достаточно для ваших нужд?
eggyal 04
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.