PS/BOJ&Programmers

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

sebinChu 2024. 2. 3. 14:45

문제

USED_GOODS_BOARD와  USED_GOODS_REPLY 테이블에서 2022년 10월에 작성된 게시글 제목, 게시글 ID, 댓글 ID, 댓글 작성자 ID, 댓글 내용, 댓글 작성일을 조회하는 SQL문을 작성해주세요. 결과는 댓글 작성일을 기준으로 오름차순 정렬해주시고, 댓글 작성일이 같다면 게시글 제목을 기준으로 오름차순 정렬해주세요.

 

sql 문제를 풀 때는 원하는 결과값이 어떤 것인지?에 대해 먼저 파악해야 한다. 

그리고 이 결과를 도출하기 위한 세부적인 연산에 대해 고민한다.

 

먼저, BOARD 테이블은 게시글에 대한 정보를 담고 있고, REPLY 테이블은 그 게시물의 첨부파일 정보를 담고 있다.(쉽게 생각해서 댓글이다. REPLY 테이블의 필드값을 통해 유추할 수 있다.) 이러한 정보를 보고 이 둘 테이블 간의 관계를 캐치하는 것이 중요하다. 게시글과 그에 대한 정보의 세부 테이블이 있는 것이므로, 두 테이블을 결합해서 원하는 정보를 명확하게 추출할 수 있기 때문이다.

 

만약, 두 테이블 간의 연관성을 생각하지 않고 개별적인 조회 연산을 수행한다면 게시글을 조회하고, 따로 개별적인 게시글에 대한 정보를 추출하기 때문에 결과를 조합하는 과정이 번거로워진다. 그래서 두 테이블간 관계를 join을 통해 연결하고 하나의 결과 집합으로 얻음으로써 효율적인 데이터 조회가 가능하다.

 

 

이러한 사고를 이 문제에 적용해보면 board_id라는 두 테이블 간의 공통 행을 찾아서 Join 연산을 통해 조건에 부합하는 집합을 도출하는 것이 핵심이다.

 

 


전체 코드

SELECT board.title, board.board_id, reply.reply_id, reply.writer_id, reply.contents,
date_format(reply.created_date, "%Y-%m-%d") as created_date
from used_goods_board as board inner join used_goods_reply as reply
on board.board_id = reply.board_id
where date_format(board.created_date, "%Y-%m") = '2022-10'
order by reply.created_date asc, board.title asc;

 

  • 테이블 이름이 다소 긴 경향이 있어서 as 연산자를 통해 재정의하였다.
  • DATE 데이터를 연산 및 출력에 조작하기 위해 date_format을 활용하였다.
  • join은 inner join 연산자를 통해 명시적으로 선언하였다.