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


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.