프로그래머스

[프로그래머스] SQL - 조건에 부합하는 중고거래 댓글 조회하기(ORACLE)

Seong-Jun 2025. 3. 11. 18:00
728x90
반응형
SMALL

 

이 문제는 SELECT 관련 문제이다. 조건과 무엇을 조회해야 하는지를 잘 파악해 보자!

 

분석하기

게시글 제목, 게시글 ID, 댓글 ID, 댓글 작성자 ID, 댓글 내용, 댓글 작성일

 

  1. 조회할 목록을 보면 게시글 테이블과 댓글 테이블 두 곳의 데이터를 조회해야 하는 것을 알 수 있다. 그러므로 JOIN을 해야 한다
  2. 결과는 댓글 작성일을 기준으로 오름차순, 댓글 작성일이 같다면 게시글 제목을 기준으로 오름차순 정렬을 해야 한다
  3. 조회의 조건으로는 2022년 10월에 작성된 게시글을 조회해야 하므로 WHERE 절에서 CREATED_DATE가 22년 10월인 데이터를 찾기 위해 조건식을 작성해야 한다.

실행 순서에 따른 설명

1. FROM 절

FROM USED_GOODS_BOARD UGB
	JOIN USED_GOODS_REPLY UGR ON UGB.BOARD_ID = UGR.BOARD_ID

 먼저 USED_GOODS_BOARD 테이블을 기준으로 잡고 USED_GOODS_REPLY 테이블을 JOIN 했다. ON 뒤에 조건으로 UGB.BOARD_ID와 UGR.BOARD_ID가 같은 데이터만 불러올 수 있도록 했다. 그리고 중복 컬럼이 있기 때문에 각각 테이블에 별칭을 주었다.

 

2. WHERE 절

WHERE TO_CHAR(UGB.CREATED_DATE, 'YYYY-MM') = '2022-10'

 TO_CHAR 함수를 사용하여 DATE 타입인 CREATED_DATE 컬럼을 'YYYY-MM' 형식으로 문자타입으로 변환 후 '2022-10' 리터럴 값과 같은 경우만 조회하도록 조건식을 주었다.

3. SELECT 절

SELECT UGB.TITLE, UGB.BOARD_ID, UGR.REPLY_ID, UGR.WRITER_ID, UGR.CONTENTS,
	TO_CHAR(UGR.CREATED_DATE, 'YYYY-MM-DD') AS CREATED_DATE

 중복 컬럼들이 있기 때문에 FROM 절에서 설정한 별칭을 붙여주고 문제 답안처럼 출력하기 위해 TO_CHAR 함수를 사용하여 CREATED_DATE를 포맷하여 문자로 변환하고 AS를 사용하여 별칭을 주었다.

4. ORDER BY 절

ORDER BY UGR.CREATED_DATE ASC, UGB.TITLE ASC;

 ORDER BY 절에서 정렬을 설정할 수 있다. ASC는 오름차순이고 DESC는 내림차순이다. ASC는 기본값이므로 생략 가능하다.

 

전체 코드

SELECT UGB.TITLE, UGB.BOARD_ID, UGR.REPLY_ID, UGR.WRITER_ID, UGR.CONTENTS,
            TO_CHAR(UGR.CREATED_DATE, 'YYYY-MM-DD') AS CREATED_DATE
FROM USED_GOODS_BOARD UGB JOIN USED_GOODS_REPLY UGR ON UGB.BOARD_ID = UGR.BOARD_ID
WHERE TO_CHAR(UGB.CREATED_DATE, 'YYYY-MM') = '2022-10'
ORDER BY UGR.CREATED_DATE ASC, UGB.TITLE ASC;
728x90
반응형
LIST