[프로그래머스, SQL] 조건에 부합하는 중고거래 댓글 조회하기
2025. 8. 26. 20:47ㆍ개발/SQL
반응형
문제
USED_GOODS_BOARD와 USED_GOODS_REPLY 테이블에서 2022년 10월에 작성된 게시글 제목, 게시글 ID, 댓글 ID, 댓글 작성자 ID, 댓글 내용, 댓글 작성일을 조회하는 SQL문을 작성해주세요. 결과는 댓글 작성일을 기준으로 오름차순 정렬해주시고, 댓글 작성일이 같다면 게시글 제목을 기준으로 오름차순 정렬해주세요.
1. SELECT 절
SELECT
A.TITLE,
A.BOARD_ID,
B.REPLY_ID,
B.WRITER_ID,
B.CONTENTS,
DATE_FORMAT(B.CREATED_DATE, "%Y-%m-%d") AS CREATED_DATE
- A.TITLE: 게시글 제목 (게시판 글의 제목)
- A.BOARD_ID: 게시글 고유 ID
- B.REPLY_ID: 댓글 고유 ID
- B.WRITER_ID: 댓글 작성자 ID
- B.CONTENTS: 댓글 내용
- DATE_FORMAT(B.CREATED_DATE, "%Y-%m-%d"): 댓글 작성일을 연-월-일 형식(예: 2022-10-05)으로 변환해서 가져옴
👉 즉, 이 SELECT는 "2022년 10월에 작성된 게시글들에 달린 댓글의 게시글 제목, 게시글ID, 댓글ID, 댓글 작성자, 댓글 내용, 댓글 작성일(YYYY-MM-DD)"을 뽑아옵니다.
2. FROM / JOIN 절
FROM USED_GOODS_BOARD AS A
INNER JOIN
USED_GOODS_REPLY AS B ON A.BOARD_ID = B.BOARD_ID
- USED_GOODS_BOARD → 중고거래 게시글 테이블 (별칭: A)
- USED_GOODS_REPLY → 댓글 테이블 (별칭: B)
- INNER JOIN ... ON A.BOARD_ID = B.BOARD_ID
→ 게시글과 댓글은 BOARD_ID를 기준으로 연결됨. 즉, 게시글에 달린 댓글만 매칭해서 가져온다는 뜻입니다.
3. WHERE 절
WHERE DATE_FORMAT(A.CREATED_DATE, "%Y-%m") = '2022-10'
- A.CREATED_DATE → 게시글 작성일
- DATE_FORMAT(..., "%Y-%m") → 게시글 작성일을 YYYY-MM 형식으로 변환
- = '2022-10' → 2022년 10월에 작성된 게시글만 조회
👉 즉, "2022년 10월에 작성된 게시글에 달린 댓글만 가져오겠다"는 조건입니다.
4. ORDER BY 절
ORDER BY B.CREATED_DATE ASC, A.TITLE ASC;
- B.CREATED_DATE ASC → 댓글 작성일 기준으로 오름차순 정렬 (먼저 달린 댓글이 위로 옴)
- A.TITLE ASC → 같은 날짜 내에서는 게시글 제목 순으로 정렬
5. 최종적으로 이 SQL이 하는 일
👉 "2022년 10월에 작성된 게시글들의 댓글 목록을, 댓글 작성일 오름차순 + 게시글 제목 순으로 정렬해서 보여준다."
결과에는 다음 정보가 포함됨:
- 게시글 제목
- 게시글 ID
- 댓글 ID
- 댓글 작성자 ID
- 댓글 내용
- 댓글 작성일 (YYYY-MM-DD 형식)
6. 공부 포인트 ✍️
- INNER JOIN → 두 테이블을 연결할 때, 양쪽 모두에 있는 데이터만 가져옴. (게시글에 댓글이 없는 경우는 제외됨)
- DATE_FORMAT → 날짜를 원하는 문자열 형식으로 바꿀 때 사용 (MySQL 함수).
- 조건에서 DATE_FORMAT을 쓰는 경우 주의점 → 인덱스가 잘 안 쓰일 수 있어서, 성능을 위해서는 BETWEEN '2022-10-01' AND '2022-10-31' 같은 범위 조건을 쓰는 게 좋음.
- 정렬 순서 → ORDER BY에 여러 칼럼을 넣으면 첫 번째 → 두 번째 순서로 정렬됨.
반응형