2026, 새로운 도약을 시작합니다.

MYSQL 질문 드립니다.. 채택완료

3년 전 조회 2,511

select wr_id, mb_no, count(*) from g5_write.... group by wr_id, mb_no;

wr_id mb_no count(*)
18 7 3
19 9 5
20 9 1

위와 같은 결과가 나왔을 때,

mb_no가 중복이 있는 경우 (9가 2개) count(*)가 최대인 행만 남기고 싶습니다.

wr_id 가 18,19인 행만 남게요.

어떻게 쿼리를 짜야할까요?..

답변 4개

채택된 답변
+20 포인트

서브쿼리(하위질의)를 사용해서 해보시면 될 것 같습니다!

로그인 후 평가할 수 있습니다

답변에 대한 댓글 3개

답변 감사합니다. 서브쿼리를 어떻게 짜야할지 감이 전혀 안 잡혀서요.. 어떤 식으로 해야할까요?
mysql gruop by max 라고 구글링해보시면 비슷한 내용이 많이 나오는데 참고해보시면 될 것 같아요!
http://jason-heo.github.io/mysql/2014/03/05/find-max-row.html
https://helloino.tistory.com/120
https://bamdule.tistory.com/219
해결했습니다! 5건만 조회하면 돼서 성능은 어떨지 모르겠지만..

SELECT t1.*
FROM (
SELECT wr_id, mb_no, count(*) as cnt
FROM g5_write_...
GROUP BY wr_id, mb_no
) t1
INNER JOIN
(
select mb_no,max(cnt) as max from (
SELECT wr_id, mb_no, count(*) as cnt
FROM g5_write_...
GROUP BY wr_id, mb_no
) c
GROUP BY mb_no
) t2
ON t1.mb_no = t2.mb_no AND t1.cnt = t2.max;
;

감사합니다!

댓글을 작성하려면 로그인이 필요합니다.

Copy


select wr_id, mb_no, count(*) from g5_write.... group by wr_id, mb_no  order by  count(*)  desc limit 0,1;  

정렬을 count(*) desc 하시고 limit 0,1 해서 최상위 한개만 가져오심 됩니다

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

댓글을 작성하려면 로그인이 필요합니다.

https://sukkyu.tistory.com/60

DISTINCT를 사용해보세요.

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인
🐛 버그신고