본문 바로가기
개발하는 '정'/DB

[MYSQL] COUNT의 MAX 구하기 (GROUP BY 2개 이상)

by 주앤정_블로그 2022. 7. 13.

여러 커뮤니티에 질의를 올려도 단일 행 GROUP BY 인 경우만 알려줘서..

그래도 많은 사람들의 도움을 받아 해결했기 때문에

다른 사람들에게도 도움이 될까 싶어서 적어본다..

 

 

 

"select 필드1, 필드2, count(*) from TABLE group by 필드1, 필드2;"

쿼리를 실행하면 아래 표와 같은 결과가 나오는데,

필드 2가 중복되는 경우 필드1과 상관없이 COUNT(*)가 제일 큰 값만 가지고 오고 싶은 상황.

(필드1 값이 18,19인 행만 남게)

필드1 필드2 count(*)
18 7 3
19 9 5
20 9 1

 

 

아래 쿼리를 쓰면

 

SELECT t1.*
FROM (
    SELECT 필드1, 필드2, count(*) as cnt
    FROM TABLE
    GROUP BY 필드1, 필드2
) t1
INNER JOIN
(
    select 필드2,max(cnt) as max from (
        SELECT 필드1, 필드2, count(*) as cnt
        FROM TABLE
        GROUP BY 필드1, 필드2
    ) c
    GROUP BY 필드2
) t2
ON  t1.필드2 = t2.필드2 AND t1.cnt = t2.max;
;
필드1 필드2 count(*)
18 7 3
19 9 5

필드 2 중복이 제거된다.

 

다 짜고 보니 정말 간단한데, 짜는 내내 생각보다 골머리를 앓았다. 갈 길이 한참 멀었구나 싶다ㅠ

반응형

댓글