728x90
반응형
SMALL
이 문제는 SELECT 관련 문제이다. 조건과 무엇을 조회해야 하는지를 잘 파악해 보자!
분석하기
게시글 제목, 게시글 ID, 댓글 ID, 댓글 작성자 ID, 댓글 내용, 댓글 작성일
- 조회할 목록을 보면 게시글 테이블과 댓글 테이블 두 곳의 데이터를 조회해야 하는 것을 알 수 있다. 그러므로 JOIN을 해야 한다
- 결과는 댓글 작성일을 기준으로 오름차순, 댓글 작성일이 같다면 게시글 제목을 기준으로 오름차순 정렬을 해야 한다
- 조회의 조건으로는 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
'프로그래머스' 카테고리의 다른 글
[프로그래머스] SQL - 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기(ORACLE) (1) | 2025.03.13 |
---|---|
[프로그래머스] SQL - 자동차 평균 대여 기간 구하기 (1) | 2025.03.13 |