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

90

Пример:

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

WHERE [something]

GROUP BY partnumber, manufacturer, condition

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

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

MAX(LENGTH(description)) 

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

user1336827
источник

Ответы:

182

Попробуйте ORDER BY LENGTH(description) DESCиспользовать, LIMIT 1чтобы получить только самые большие.

СтайлзКризис
источник
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
1

MAX (LENGTH (описание)) возвращает длину самого длинного значения в столбце Description.

Тушар Кесаре
источник
0

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

user1336827
источник
7
Это не даст вам самое длинное описание, а скорее описание, которое является лексическим максимумом (то есть в алфавитном порядке). Однако, поскольку при таком порядке любое непустое описание будет помещено после пустых, это всегда будет приводить к непустому описанию, если оно существует: возможно, этого достаточно для ваших нужд?
eggyal 04