본문 바로가기
PS/SQL

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

by 행복한라이언 2024. 1. 29.
728x90
반응형

문제링크

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

 

프로그래머스

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

programmers.co.kr

 

1. 핵심

  • USED_GOODS_BOARD와 USED_GOODS_REPLY 두 테이블 INNER JOIN 
    • 결과 TABLE을 보면 NULL없다. 둘이 COL에 차이가 있는데 NULL이 없다는 건 INNER JOIN임을 알 수 있다.
  • "2022년 10월" 에 대한 여러가지 풀이
    • LIKE 를 활용해 "2022-10" 이 있는지 확인 
    • DATE_FORMAT(B.CREATED_DATE, "%Y-%m") = "2022-10"으로 DATE_FORM 활용
    • DATE_FORMAT에 YEAR, MONTH 활용
  • JOIN을 했을 때 정확히 어떤 COL을 가져오는지 주의깊게 봐야함.

2. 코드(MySQL)

SELECT B.TITLE, B.BOARD_ID, R.REPLY_ID, R.WRITER_ID, R.CONTENTS,
    DATE_FORMAT(B.CREATED_DATE, '%Y-%m-%d') as CREATED_DATE
FROM USED_GOODS_BOARD AS B
INNER JOIN USED_GOODS_REPLY AS R ON B.BOARD_ID = R.BOARD_ID
WHERE B.CREATED_DATE LIKE '2022-10%'
ORDER BY R.CREATED_DATE ASC, B.TITLE ASC;

 


SELECT B.TITLE, B.BOARD_ID, R.REPLY_ID, R.WRITER_ID, R.CONTENTS,
    DATE_FORMAT(B.CREATED_DATE, '%Y-%m-%d') as CREATED_DATE
FROM USED_GOODS_BOARD AS B
INNER JOIN USED_GOODS_REPLY AS R ON B.BOARD_ID = R.BOARD_ID
WHERE DATE_FORMAT(B.CREATED_DATE, "%Y-%m") = '2022-10'
ORDER BY R.CREATED_DATE ASC, B.TITLE ASC;

 


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
INNER JOIN USED_GOODS_REPLY AS R ON B.BOARD_ID = R.BOARD_ID
-- 2022년의 10월의 '게시글' > USED_GOODS_BOARD -> B
WHERE YEAR(B.CREATED_DATE) = 2022 and MONTH(B.CREATED_DATE) = 10
ORDER BY R.CREATED_DATE ASC, B.TITLE ASC;

 

3.  주의

  • 2022년 10월에 작성된 게시글 제목 → USED_GOODS_BOARD(B)
    • WHERE에서 2022년 10월의 게시글이므로 B.CREATED_DATE가 되어야한다. R.CREATED_DATE 하면 틀린다.
  • 게시글 ID → USED_GOODS_BOARD(B)
  • 댓글 ID → USED_GOODS_REPLY(R)
  • 댓글 작성자 ID → USED_GOODS_REPLY(R)
  • 댓글 내용 USED_GOODS_REPLY(R)
  • 댓글 작성일 USED_GOODS_REPLY(R)

 

728x90
반응형