프로그래머스 코딩테스트 연습 > 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
'프로그래머스 > SQL' 카테고리의 다른 글
| [프로그래머스/Oracle] 12세 이하인 여자 환자 목록 출력하기 (0) | 2024.04.10 |
|---|---|
| [프로그래머스/Oracle] 조건에 맞는 도서 리스트 출력하기 (0) | 2024.04.10 |
| [프로그래머스/Oracle] 평균 일일 대여 요금 구하기 (0) | 2024.04.09 |
| [프로그래머스/Oracle] 흉부외과 또는 일반외과 의사 목록 출력하기 (0) | 2024.04.08 |