SQL/MY SQL 문제 풀이(프로그래머스)

[MYSQL] PROGRAMMERS_조건에 부합하는 중고거래 댓글 조회하기

SQL공부 2024. 2. 21. 01:14
반응형

SELECT TITLE, a.BOARD_ID, REPLY_ID, b.WRITER_ID, b.CONTENTS, 
DATE_FORMAT(b.CREATED_DATE, '%Y-%m-%d') as CREATED_DATE
From USED_GOODS_BOARD as a, USED_GOODS_REPLY as b
where  a.BOARD_ID = b.BOARD_ID
and a.CREATED_DATE LIKE "2022-10%"
order by b.CREATED_DATE,TITLE

 

USED_GOODS_BOARD 테이블

BOARD_ID WRITER_ID TITLE CONTENTS PRICE CREATED_DATE STATUS VIEWS

 

USED_GOODS_REPLY 테이블

REPLY_ID BOARD_ID WRITER_ID CONTENTS CREATED_DATE

 

문제

 

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

CREATED_DATE의 포맷이 예시의 포맷과 일치해야 정답처리

 

LV.1 문제중 가장 고난도 문제였다. 분명 나는 잘 푼거 같다 생각했는데 오답처리가 되어 의문이었다. (나중에 보니까 alias 명을 잘못기입..)

 

차근차근 살펴보면

- 게시글,댓글 두 테이블에서 2022년 10월 작성된 게시글, 댓글 조회

- 정렬

- 포맷 일치

 

2번째로 해결해야할 정렬은 간단히 order by로 처리하였다. order by절에 쓰는 컬럼 순서를 기준으로 먼저 정렬 후 그 기준으로 그 다음 컬럼을 정렬 하는 방식이라 주어진 조건 순서대로 기입하였다. (참고로 댓글 작성일 기준으로 이후에 설정한 alias b(댓글 테이블명) 을 붙여줘야한다)

 

포맷일치의 경우 마찬가지로 DATE_FORMAT을 통해 형식을 맞추어 주었다.

 

이제 두 테이블의 조인을 살펴봐야하는데. 두 테이블에서 공통적으로 가진 데이터내에서 값을 조회하는 것으로 보아 inner join 처리 하였다.

게시판은 alias를 a 댓글은 b로 처리하였고 서로 공통 되는 컬럼 중 게시판 데이터를 조회 하기위해 유니크성을 지니는 것은 board_ID로 판단하여 해당 기준으로 조인해 주었다.

 

그 후 2022년 10월에 작성된 게시글 제목이므로 게시글 테이블인 a. 를 붙여주고 2022-10% 필터를 처리해 주고 SELECT 절에서는 댓글관련은 b. 게시글 관련 데이터는 a. 처리를 해주어야 중복된 컬럼명을 구분하여 데이터를 조회 가능하여 처리해 주었다.

 

반응형