프로그래머스/레벨1

[프로그래머스 MySQL] 조건에 부합하는 중고거래 댓글 조회하기 - SELECT

박차 2026. 9. 4. 00:38

프로그래머스 SQL 고득점 Kit "조건에 부합하는 중고거래 댓글 조회하기" 문제 풀이입니다. USED_GOODS_BOARD와 USED_GOODS_REPLY 테이블을 JOIN해서 특정 연월에 작성된 게시글의 댓글을 조회하고, 다중 정렬 기준(ORDER BY)까지 적용하는 방법을 정리했습니다.


포스트 본문

문제 설명

중고거래 게시판 정보를 담은 USED_GOODS_BOARD 테이블과 댓글 정보를 담은 USED_GOODS_REPLY 테이블에서, 2022년 10월에 작성된 게시글에 달린 댓글 내역을 조회하는 문제입니다.

출력해야 하는 항목은 게시글 제목(TITLE), 게시글 ID(BOARD_ID), 댓글 ID(REPLY_ID), 댓글 작성자 ID(WRITER_ID), 댓글 내용(CONTENTS), 댓글 작성일(CREATED_DATE)이고, 결과는 댓글 작성일 오름차순으로 정렬하되 작성일이 같으면 게시글 제목 오름차순으로 정렬해야 합니다.

테이블 구조

USED_GOODS_BOARD: BOARD_ID(게시글 ID), WRITER_ID(작성자 ID), TITLE(제목), CONTENTS(내용), PRICE(가격), CREATED_DATE(작성일), STATUS(거래상태), VIEWS(조회수)

USED_GOODS_REPLY: REPLY_ID(댓글 ID), BOARD_ID(게시글 ID), WRITER_ID(작성자 ID), CONTENTS(댓글 내용), CREATED_DATE(작성일)

입출력 예 (결과)

TITLEBOARD_IDREPLY_IDWRITER_IDCONTENTSCREATED_DATE
반려견 배변패드 팝니다 B0001 R000000001 s2s2123 구매하겠습니다. 쪽지 드립니다. 2022-10-02
국내산 볶음참깨 B0002 R000000002 hoho1112 쪽지 주세요. 2022-10-03

주의사항: CREATED_DATE의 포맷이 예시의 포맷(YYYY-MM-DD)과 일치해야 정답 처리됩니다.

풀이 아이디어

두 테이블을 게시글 ID(BOARD_ID) 기준으로 JOIN해서 게시글 정보와 댓글 정보를 한 번에 가져와야 합니다. 이때 주의할 점이 하나 있습니다. "2022년 10월에 작성된 게시글"이 기준이므로, 조건은 댓글의 작성일이 아니라 게시글(USED_GOODS_BOARD)의 작성일에 걸어야 합니다.

절차는 다음과 같습니다.

  1. USED_GOODS_BOARD와 USED_GOODS_REPLY를 BOARD_ID로 JOIN합니다.
  2. 게시글 작성일(CREATED_DATE)이 2022년 10월인 행만 남깁니다.
  3. 댓글 작성일 오름차순, 동일하면 게시글 제목 오름차순으로 정렬합니다.

코드

 
sql
SELECT ugb.TITLE, ugb.BOARD_ID, ugr.REPLY_ID, ugr.WRITER_ID, ugr.CONTENTS, ugr.CREATED_DATE
FROM USED_GOODS_BOARD ugb
JOIN USED_GOODS_REPLY ugr ON ugb.BOARD_ID = ugr.BOARD_ID
WHERE YEAR(ugb.CREATED_DATE) = 2022
  AND MONTH(ugb.CREATED_DATE) = 10
ORDER BY ugr.CREATED_DATE, ugb.TITLE;

코드 동작 설명

  • FROM USED_GOODS_BOARD ugb JOIN USED_GOODS_REPLY ugr ON ugb.BOARD_ID = ugr.BOARD_ID: 게시글 ID를 기준으로 두 테이블을 연결합니다. 댓글이 하나도 없는 게시글은 INNER JOIN이므로 자연스럽게 결과에서 제외됩니다(문제 요구사항과 일치).
  • YEAR(ugb.CREATED_DATE) = 2022 AND MONTH(ugb.CREATED_DATE) = 10: 게시글 작성일에서 연도와 월을 각각 추출해 2022년 10월인 것만 필터링합니다. BETWEEN '2022-10-01' AND '2022-10-31'처럼 범위로 걸어도 동일한 결과를 얻을 수 있습니다.
  • ORDER BY ugr.CREATED_DATE, ugb.TITLE: ORDER BY에 컬럼을 콤마로 나열하면 다중 정렬 기준이 됩니다. 첫 번째 기준(댓글 작성일)이 같은 행들끼리는 두 번째 기준(게시글 제목)으로 다시 정렬됩니다. 둘 다 별도 명시가 없으면 기본값인 오름차순(ASC)이 적용됩니다.

예시 데이터로 확인해보면, USED_GOODS_BOARD의 게시글 5건은 모두 2022년 10월에 작성되었지만, USED_GOODS_REPLY의 댓글 5건 중 BOARD_ID가 B0001~B0005 범위에 걸리는 것은 R000000001(B0001), R000000002(B0002) 두 건뿐입니다(R000000003~5는 B0006, B0007, B0009로 JOIN에서 매칭되지 않아 제외). 이 두 건을 댓글 작성일 순으로 정렬하면 2022-10-02(반려견 배변패드) → 2022-10-03(국내산 볶음참깨) 순이 되어, 문제에서 제시한 결과와 정확히 일치합니다.