Study/SQL

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

delay100 2024. 1. 11. 11:10
728x90
반응형
SMALL

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

난이도: Lv.1

언어: MySQL

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

 

프로그래머스

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

programmers.co.kr

 

실패

SELECT b.TITLE, a.BOARD_ID, a.REPLY_ID, a.WRITER_ID, a.CONTENTS, date_format(a.CREATED_DATE, "%Y-%m-%d") as CREATED_DATE
FROM USED_GOODS_REPLY a 
    JOIN USED_GOODS_BOARD b ON a.BOARD_ID = b.BOARD_ID
WHERE 1=1
AND date_format(a.CREATED_DATE, "%Y-%m") = '2022-10'
ORDER BY a.CREATED_DATE ASC, b.TITLE ASC

실패이유

1. 문제를 제대로 읽지 않음

WHERE절에서 게시글 기준으로 2022년 10월 것이라고 되어있으나, 댓글 기준으로 2022년 10월 것을 검사함

 

성공

SELECT b.TITLE, a.BOARD_ID, a.REPLY_ID, a.WRITER_ID, a.CONTENTS, DATE_FORMAT(a.CREATED_DATE, "%Y-%m-%d") as CREATED_DATE
FROM USED_GOODS_REPLY a 
    JOIN USED_GOODS_BOARD b ON a.BOARD_ID = b.BOARD_ID 
WHERE 1=1
AND DATE_FORMAT(b.CREATED_DATE, "%Y-%m") = '2022-10'
# AND SUBSTR(b.CREATED_DATE, 1, 7) = '2022-10'
ORDER BY a.CREATED_DATE ASC, b.TITLE ASC

# AND SUBSTR 방법도 가능하나, DATE_FORMAT이 더 권장되는 방식이라 DATE_FORMAT을 채용하였습니다.

하지만 여기서 SUBSTR을 사용하더라도 테스트 통과는 가능하여 주석처리 해두었습니다.

*참고 chatGPT

MySQL에서는 SUBSTR() 함수를 사용하여 문자열을 자를 수 있지만, b.CREATED_DATE가 날짜 형식으로 저장되어 있다고 가정합니다. 일반적으로 날짜는 'YYYY-MM-DD' 형식으로 저장되며, 여기서 SUBSTR(b.CREATED_DATE, 1, 7)은 'YYYY-MM' 형식의 문자열을 반환할 것입니다.

만약 b.CREATED_DATE가 'YYYY-MM-DD' 형식으로 저장되어 있다면, SUBSTR(b.CREATED_DATE, 1, 7) = '2022-10'는 정확하지 않을 수 있습니다. 이는 'YYYY-MM' 형식의 문자열을 비교하고 있기 때문입니다.

대신에 DATE_FORMAT(b.CREATED_DATE, "%Y-%m") = '2022-10'로 수정하면, 원하는 월과 연도를 비교할 수 있을 것입니다. 이렇게 하면 DATE_FORMAT() 함수를 사용하여 날짜를 원하는 형식으로 변환하고 비교할 수 있습니다.

 


코드에 질문이 있으시면 댓글을 달아주세요. 최대한 빠른 시일 내에 답변해드리겠습니다. 

봐주셔서 감사합니다.

728x90
반응형
LIST