본문 바로가기
프로그래머스/SQL

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

by 유지낭 2024. 4. 16.

프로그래머스 코딩테스트 연습 > SELECT > 조건에 부합하는 중고거래 댓글 조회하기
난이도 : Level 1


문제

https://school.programmers.co.kr/learn/courses/30/lessons/164673

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


나의 풀이

중고거래 게시판 정보(USED_GOODS_BOARD) 테이블 = "A"

Column name Type Nullable  
BOARD_ID VARCHAR(5) FALSE 게시글 ID
WRITER_ID VARCHAR(50) FALSE 작성자 ID
TITLE VARCHAR(100) FALSE 게시글 제목
CONTENTS VARCHAR(1000) FALSE 게시글 내용
PRICE NUMBER FALSE 가격
CREATED_DATE DATE FALSE 작성일
STATUS VARCHAR(10) FALSE 거래상태
VIEWS NUMBER FALSE 조회수

 

중고거래 게시판 첨부파일 정보(USED_GOODS_REPLY) 테이블 = "B"

Column name Type Nullable  
REPLY_ID VARCHAR(10) FALSE 댓글 ID
BOARD_ID VARCHAR(5) FALSE 게시글 ID
WRITER_ID VARCHAR(50) FALSE 작성자 ID
CONTENTS VARCHAR(1000) TRUE 댓글 내용
CREATED_DATE DATE FALSE 작성일

중고거래 게시판 정보(USED_GOODS_BOARD) 테이블을 A, 중고거래 게시판 첨부파일 정보(USED_GOODS_REPLY) 테이블을 B이라고 하고 작성하였습니다.

 

2022년 10월에 작성된 게시글을 찾기 위해서는 게시글 작성일(CREATED_DATE)이 있는 USED_GOODS_BOARD 테이블인 A에서 데이터를 조회하면 되는데

WHERE 조건에 TO_CHAR 메소드를 사용하여 년월(YYYYMM) 조건을 설정하여 작성하였습니다.
년월 조건으로 1일부터 말일까지의 데이터가 조회됩니다.

SELECT *
  FROM USED_GOODS_BOARD A
 WHERE TO_CHAR(A.CREATED_DATE,'YYYYMM') = '202210'

 

게시글 제목(TITLE), 게시글 ID(BOARD_ID)는 USED_GOODS_BOARD 테이블인 A에서 데이터를 조회하면 되고

댓글 ID(REPLY_ID), 댓글 작성자 ID(WRITER_ID), 댓글 내용(CONTENTS), 댓글 작성일(CREATED_DATE)은 USED_GOODS_REPLY 테이블인 B에서 데이터를 조회하면 되는데

게시글 ID(BOARD_ID)를 가지고 1:1로 조회할 수 있기에 INNER JOIN을 사용하여 데이터를 조회합니다.

SELECT A.TITLE
     , A.BOARD_ID
     , B.REPLY_ID
     , B.WRITER_ID
     , B.CONTENTS
     , B.CREATED_DATE
  FROM USED_GOODS_BOARD A INNER JOIN USED_GOODS_REPLY B
                                  ON A.BOARD_ID = B.BOARD_ID
 WHERE TO_CHAR(A.CREATED_DATE,'YYYYMM') = '202210'

게시판에 게시글은 있는데 게시글의 댓글이 없는 경우(=왼쪽을 기준으로 오른쪽에 값이 없을 수도 있는 경우)에는 LEFT JOIN을 사용하여 조회해도 됩니다.

 

결과는 댓글 작성일(CREATED_DATE)을 기준으로 오름차순 정렬, 댓글 작성일이 같다면(=두 번째 정렬 기준) 게시글 제목(TITLE)을 기준으로 오름차순 정렬하여 데이터를 조회합니다.

SELECT A.TITLE
     , A.BOARD_ID
     , B.REPLY_ID
     , B.WRITER_ID
     , B.CONTENTS
     , B.CREATED_DATE
  FROM USED_GOODS_BOARD A INNER JOIN USED_GOODS_REPLY B
                                  ON A.BOARD_ID = B.BOARD_ID
 WHERE TO_CHAR(A.CREATED_DATE,'YYYYMM') = '202210'
 ORDER BY B.CREATED_DATE, A.TITLE

 

주의사항으로 'CREATED_DATE의 포맷이 예시의 포맷과 일치해야 정답처리 됩니다.' 문구가 있어
SELECT 문 내에 있는 댓글 작성일(CREATED_DATE)의 날짜 형식을 TO_CHAR 메소드를 사용하여 년월일(YYYY-MM-DD) 형태로 변경하여 데이터를 조회합니다.

https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/TO_CHAR-datetime.html

 

SQL Language Reference

 

docs.oracle.com


최종 결과
SELECT A.TITLE
     , A.BOARD_ID
     , B.REPLY_ID
     , B.WRITER_ID
     , B.CONTENTS
     , TO_CHAR(B.CREATED_DATE,'YYYY-MM-DD') AS CREATED_DATE
  FROM USED_GOODS_BOARD A INNER JOIN USED_GOODS_REPLY B
                                  ON A.BOARD_ID = B.BOARD_ID
 WHERE TO_CHAR(A.CREATED_DATE,'YYYYMM') = '202210'
 ORDER BY B.CREATED_DATE, A.TITLE