여러 커뮤니티에 질의를 올려도 단일 행 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 중복이 제거된다.
다 짜고 보니 정말 간단한데, 짜는 내내 생각보다 골머리를 앓았다. 갈 길이 한참 멀었구나 싶다ㅠ
반응형
'개발하는 '정' > DB' 카테고리의 다른 글
MSSQL 순번 출력, 순번으로 update 하기 / UPDATE with ROWNUM() (0) | 2022.09.27 |
---|---|
[MYSQL] 이모지 입력하기 / 윈도우 이모디콘 입력하기 (phpMyAdmin) (0) | 2022.09.05 |
[mysql] 컬럼을 rownum 으로 update (0) | 2021.10.01 |
[Mysql] select 결과값 update 하기 (0) | 2021.04.28 |
mssql 다른 테이블 조인해서 UPDATE하기 (0) | 2021.01.27 |
댓글