2013-09-30 5 views
0

이미지에 가장 일반적인 색상의 표가 있습니다. 모양은 다음과 같습니다.그룹 별 최대 행의 값

file | color | count 
--------------------- 
1 | ffefad | 166 
1 | 443834 | 84 
2 | 74758a | 3874 
2 | abcdef | 228 
2 | 876543 | 498 
3 | 543432 | 3382 
3 | abcdef | 483 

각 이미지에 가장 일반적인 색상을 얻으려고합니다.

file | color | count 
--------------------- 
1 | ffefad | 166 
2 | 74758a | 3874 
3 | 543432 | 3382 

그래서 내 문제는 내가 file 열 BY GROUP 필요 것 같다,하지만 MAX()는 count 열 : 그래서 난 할 내 결과를 싶습니다. 하지만 간단히

SELECT h.file, h.color, MAX(h.count) FROM histogram GROUP BY h.file 

이 불확실하기 때문에 작동하지 않습니다. 따라서 색상 결과가 카운트 결과의 행과 일치하지 않습니다.

SELECT h.file, h.color, MAX(h.count) FROM histogram GROUP BY h.file, h.color 

은 결정 성을 수정하지만 모든 행은 이제 "고유"로 모든 행이 반환됩니다.

내가 얻을 수있는 "올바른"값, 파일 및 개수는 그 자체로 뚜렷하지 않으므로 하위 쿼리 또는 조인을 수행하는 방법을 알아낼 수 없습니다.

아마 saner 스키마가 필요합니까? 그것은 "내"테이블이므로 필요한 경우 변경할 수 있습니다.

+0

답변을 수락하기 전에 기다려야합니다. @ Twelfth는 AgRizzo보다 2 ~ 3 배 빠릅니다. http://sqlfiddle.com/#!2/82203/8 –

답변

1
SELECT tbl.file, tbl.color, tbl.count 
FROM tbl 
LEFT JOIN tbl as lesser 
ON lesser.file = tbl.file 
AND tbl.count < lesser.count 
WHERE lesser.file IS NULL 
order by tbl.file 
+0

'file '이 별개의 필드가 아니기 때문에 이것이 왜 작동하는지 이해하지 못합니다. 감사. 나는 실제로이 문제를 어떻게 해결할 것인가, 각 파일에 대한 색상의 상대적인 순위를 유지하는'rank' 컬럼을 테이블에 추가하는 것입니다. 그래서'SELECT * WHERE rank = 1 '. 또한 각 이미지에 대해 가장 일반적인 2, 3, N 색상을 쉽게 얻을 수 있으며, 앞으로도해야 할 수도 있습니다. –

1
select file , max(count) 
FROM histogram 
GROUP BY h.file 

이 파일에 의해 최대 (수를) 줄 것이다. 하위 쿼리와 내부 조인으로 변환하여 필터 역할을합니다.

select h.file, h.colour, h.count 
from histogram inner join 
(select file , max(count) as maxcount 
FROM histogram 
GROUP BY h.file) a 
on a.file = h.file and a.maxcount = h.count 

동일한 최대 개수의 색상이 2 개 이상이면 2 개의 행으로 응답합니다.