그룹화 할 때 테이블에서 가장 긴 '문자열'을 선택하는 방법


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 2015

1
@rosa : 성능 시간이 크게 다를지 모르겠지만 자세한 내용은 맞습니다 (이와 ORDER BY 모두 파일 정렬이 필요함). 이 버전의 장점은 하나의 불확실한 레코드가 아니라 최대 길이의 모든 레코드를 반환한다는 것입니다.
— eggyal 2015

@rosa : 또한이 질문을 되돌아 보면 OP가 전체적으로 가장 긴 결과가 아닌 각 그룹에서 가장 긴 문자열을 얻기를 원한다는 것을 이해했습니다.
— eggyal 2015

0

내 질문에 답한 것 같습니다 .MAX (설명)가 잘 작동하는 것 같습니다.


7
그것은 가장 긴 설명을 제공하지 않고 어휘 최대 값 인 설명 (즉, 알파벳 순서)을 제공합니다. 그러나 그 순서는 비어 있지 않은 설명을 비어있는 설명 뒤에 배치하므로 항상 비어 있지 않은 설명이있는 경우 결과가 나타납니다. 아마도 이것이 당신의 필요에 충분할까요?
— eggyal

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.