코딩테스트 연습 > SELECT > 조건에 부합하는 중고거래 댓글 조회하기
난이도: Lv.1
언어: MySQL
https://school.programmers.co.kr/learn/courses/30/lessons/164673
실패
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() 함수를 사용하여 날짜를 원하는 형식으로 변환하고 비교할 수 있습니다.
코드에 질문이 있으시면 댓글을 달아주세요. 최대한 빠른 시일 내에 답변해드리겠습니다.
봐주셔서 감사합니다.
'Study > SQL' 카테고리의 다른 글
[프로그래머스 SQL] 과일로 만든 아이스크림 고르기 (0) | 2024.01.11 |
---|---|
[프로그래머스 SQL] 조건에 맞는 도서 리스트 출력하기 (0) | 2024.01.11 |
[프로그래머스 SQL] 평균 일일 대여 요금 구하기 (0) | 2024.01.11 |
[프로그래머스 SQL] 자동차 대여 기록에서 장기/단기 대여 구분하기 (0) | 2024.01.11 |
[프로그래머스 SQL] 특정 옵션이 포함된 자동차 리스트 구하기 (1) | 2024.01.11 |