이번에 다뤄볼 문제는 조인 및 조건을 활용하여 데이터를 조회하는 문제입니다.
https://school.programmers.co.kr/learn/courses/30/lessons/131697
프로그래머스 기준 Lv.1 문제이며, 풀이 후 해설과 함께 정리해보도록 하겠습니다.
문제에서 주어진 요구사항은 다음과 같습니다.
1. 게시물과 댓글 테이블에서 2022년 10월에 작성된 데이터를 조회 2. 이 때, 게시글 제목, ID 및 댓글 ID, 작성자 ID, 내용, 작성일을 조회 3. 최종 결과는 댓글 작성일을 기준으로 오름차순 정렬 4. 만약 댓글 작성일이 동일하다면, 게시글 제목을 기준으로 오름차순 정렬 5. 작성일 컬럼의 데이터는 'YYYY-MM-DD' 형태로 조회
이를 해결하기 위해선 테이블 조인, 조건 및 다중 정렬 대한 처리가 각각 필요합니다.
이러한 요구사항에 맞추어 조합하여 주어진 문제에 대한 SQL문을 작성해보겠습니다.
가장 먼저 조인이 필요한 테이블에 대한 FROM 문을 작성합니다.
데이터는 BOARD_ID를 기준으로 중복 없이 조회하기 위한 조건 또한 작성해줍니다.
# ORACLE SELECT '비워두기' FROM USED_GOODS_BOARD BOARD, USED_GOODS_REPLY REPLY WHERE BOARD.BOARD_ID = REPLY.BOARD_ID;
다음으로 2022년 10월에 작성된 게시글만을 조회하는 조건을 덧붙혀줍니다.
# ORACLE SELECT '비워두기' FROM USED_GOODS_BOARD BOARD, USED_GOODS_REPLY REPLY WHERE BOARD.BOARD_ID = REPLY.BOARD_ID AND TO_CHAR(BOARD.CREATED_DATE, 'YYYY-MM') = '2022-10';
이후 조회가 필요한 컬럼들에 대해 SELECT 문에서 이를 명시합니다.
또한 CREATED_DATE 컬럼에 대해선 요구사항인 'YYYY-MM-DD' 포맷을 정의합니다.
# ORACLE SELECT BOARD.TITLE, BOARD.BOARD_ID, REPLY.REPLY_ID, REPLY.WRITER_ID, REPLY.CONTENTS, TO_CHAR(REPLY.CREATED_DATE, 'YYYY-MM-DD') AS CREATED_DATE FROM USED_GOODS_BOARD BOARD, USED_GOODS_REPLY REPLY WHERE BOARD.BOARD_ID = REPLY.BOARD_ID AND TO_CHAR(BOARD.CREATED_DATE, 'YYYY-MM') = '2022-10';
마지막으로 전체 데이터에 대한 정렬 조건을 정의해주어 마무리합니다.
정렬 조건은 댓글 작성일, 게시글 제목에 대해 각각 오름 및 내림차순 정의합니다.
# ORACLE SELECT BOARD.TITLE, BOARD.BOARD_ID, REPLY.REPLY_ID, REPLY.WRITER_ID, REPLY.CONTENTS, TO_CHAR(REPLY.CREATED_DATE, 'YYYY-MM-DD') AS CREATED_DATE FROM USED_GOODS_BOARD BOARD, USED_GOODS_REPLY REPLY WHERE BOARD.BOARD_ID = REPLY.BOARD_ID AND TO_CHAR(BOARD.CREATED_DATE, 'YYYY-MM') = '2022-10' ORDER BY REPLY.CREATED_DATE ASC, BOARD.TITLE ASC;
복잡해보였지만 점진적 해결을 통해 손쉽게 해결해낼 수 있었습니다.
이번 문제 또한 단순 풀이는 맞았지만, 최적의 방법인지 알 수 없습니다.
다른 사람들의 코드를 읽고 배워가며, 최적화된 코드를 작성할 수 있도록 노력하겠습니다.
긴 글 읽어주셔서 감사합니다.