Algorithm/Programmers SQL

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

제우제우 2024. 8. 28. 15:47

https://school.programmers.co.kr/learn/courses/30/lessons/164673

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

코딩테스트 연습 > SELECT > 조건에 부합하는 중고거래 댓글 조회하기

 

문제 분석 

문제 조건

USED_GOODS_BOARD와 USED_GOODS_REPLY 테이블에서 2022년 10월에 작성된 게시글 제목, 게시글 ID, 댓글 ID, 댓글 작성자 ID, 댓글 내용, 댓글 작성일을 조회하는 SQL문을 작성해주세요. 

 

결과는 댓글 작성일을 기준으로 오름차순 정렬해주시고, 댓글 작성일이 같다면 게시글 제목을 기준으로 오름차순 정렬해주세요.

조인

2개의 테이블의 데이터가 각각 필요하다. (조인이 필요하다)

댓글에는 테이블 ID가 존재한다(외래키)

그럼 USED_GOODS_BOARD와 USED_GOODS_REPLY INNER JOIN 한다. 

 

ON 조건은 테이블의 PK이자 댓글의 외래키인 테이블 ID를 사용한다.

FROM 
USED_GOODS_BOARD AS B JOIN USED_GOODS_REPLY AS R 
on B.BOARD_ID = R.BOARD_ID

where 조건 

2022년 10월에 작성된 게시글 제목

WHERE B.CREATED_DATE BETWEEN '2022-10-01' AND '2022-10-31'

정렬 기준

댓글 작성일 ASC (Default) 생략 가능 

게시글 제목 ASC (Default) 생략 가능 

ORDER BY R.CREATED_DATE, B.TITLE

정답 코드1

SELECT 
     B.TITLE, 
     B.BOARD_ID, 
     R.REPLY_ID, 
     R.WRITER_ID, 
     R.CONTENTS, 
     SUBSTRING(R.CREATED_DATE, 1, 10) AS CREATED_DATE
FROM 
USED_GOODS_BOARD AS B JOIN USED_GOODS_REPLY AS R 
on B.BOARD_ID = R.BOARD_ID
WHERE B.CREATED_DATE BETWEEN '2022-10-01' AND '2022-10-31'
ORDER BY R.CREATED_DATE, B.TITLE

2022-10-01 길이: 10

SUBSTRING 활용해서 원하는 포맷으로 맞추었다. 

SUBSTRING(R.CREATED_DATE, 1, 10) AS CREATED_DATE

정답 코드2 (DATE_FORMAT 사용) 

SELECT 
     B.TITLE, 
     B.BOARD_ID, 
     R.REPLY_ID, 
     R.WRITER_ID, 
     R.CONTENTS, 
     DATE_FORMAT(R.CREATED_DATE, '%Y-%m-%d') AS CREATED_DATE
FROM 
USED_GOODS_BOARD AS B JOIN USED_GOODS_REPLY AS R 
on B.BOARD_ID = R.BOARD_ID
WHERE B.CREATED_DATE BETWEEN '2022-10-01' AND '2022-10-31'
ORDER BY R.CREATED_DATE, B.TITLE
DATE_FORMAT(R.CREATED_DATE, '%Y-%m-%d') AS CREATED_DATE