https://school.programmers.co.kr/learn/courses/30/lessons/164673
문제 설명
다음은 중고거래 게시판 정보를 담은 USED_GOODS_BOARD 테이블과 중고거래 게시판 첨부파일 정보를 담은 USED_GOODS_REPLY 테이블입니다. USED_GOODS_BOARD 테이블은 다음과 같으며 BOARD_ID, WRITER_ID, TITLE, CONTENTS, PRICE, CREATED_DATE, STATUS, VIEWS은 게시글 ID, 작성자 ID, 게시글 제목, 게시글 내용, 가격, 작성일, 거래상태, 조회수를 의미합니다.
USED_GOODS_REPLY 테이블은 다음과 같으며 REPLY_ID, BOARD_ID, WRITER_ID, CONTENTS, CREATED_DATE는 각각 댓글 ID, 게시글 ID, 작성자 ID, 댓글 내용, 작성일을 의미합니다.
문제
USED_GOODS_BOARD와 USED_GOODS_REPLY 테이블에서 2022년 10월에 작성된 게시글 제목, 게시글 ID, 댓글 ID, 댓글 작성자 ID, 댓글 내용, 댓글 작성일을 조회하는 SQL문을 작성해주세요. 결과는 댓글 작성일을 기준으로 오름차순 정렬해주시고, 댓글 작성일이 같다면 게시글 제목을 기준으로 오름차순 정렬해주세요.
예시
USED_GOODS_BOARD 테이블이 다음과 같고
USED_GOODS_REPLY 테이블이 다음과 같을 때
SQL을 실행하면 다음과 같이 출력되어야 합니다.
주의사항
CREATED_DATE의 포맷이 예시의 포맷과 일치해야 정답처리 됩니다.
문제 접근
1. 두 테이블 조인 >> 테이블명에 엘리어스, 칼럼명은 동일한데 값이 다르니까 주의(어떤 테이블의 어떤 칼럼인지 명시)
2. where에 날짜 조건 >> '2022년 10월에 작성된 게시글'이므로 B.CREATED_DATE에 조건 걸어야 함
3. 대신 출력 결과에 나와야 하는건 USED_GOODS_REPLY 테이블에 있는 R.CREATED_DATE
4. 코드 실행해보니 날짜에 00:00:00이 붙어있어서 날짜 포맷 바꾸기
문제점, 오류
1. 처음엔 BOARD_ID를 기준으로 댓글 관련 데이터도 다 끌어와야 하기 때문에, LEFT JOIN 이라고 생각함
→ LEFT JOIN을 하게되면, 댓글이 달리지 않은 게시글도 결과에 포함된다. 근데, 해당 데이터에 한해서, 다른 조건들까지 합쳐졌을 때 INNER와 LEFT의 결과 차이가 없었다. 하지만 INNER로 푸는게 더 명확한 것은 맞다. 풀이 후기에 문제 설명이 모호하게 되어 있다고 하던데, 틀린 이후에 역으로 추적해서 찾아야 하는 문제인가 싶다.
2. CREATED_DATE를 출력할 때, 처음엔 예시와 결과만 똑같이 맞추면 되는 줄 알고, LEFT(R.CREATED_DATE, 10) >> 왼쪽에서 10개 문자만 가져오기를 쓰고 AS로 칼럼명을 다시 지정해줬는데, 오답이었다.
→ 일단 원하는 길이로 자르고 나서, 날짜 데이터의 포맷을 새로 바꿔야 했다. DATE_FORMAT은 아직 공부가 안되어있어서 떠올리지도 못했다. DATE_FORMAT은 SELECT문에 써주기.
구글링 결과, 내가 쓴 WHERE LIKE말고도 날짜를 자르는 방법은 여러 가지가 있다.
1) BETWEEN ('2022-10-01') AND ('2022-10-31')
2) SUBSTR(R.CREATED_DATE,1,7) = '2022-10'
DATE_FORMAT은 새로 공부해서 글 짤 예정..
최종 코드
SELECT TITLE, B.BOARD_ID, 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
WHERE B.CREATED_DATE LIKE '2022-10%'
ORDER BY CREATED_DATE, TITLE
'SQL' 카테고리의 다른 글
DATETIME, DATE_FORMAT (1) | 2024.11.19 |
---|---|
프로그래머스 SQL - 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 (2) | 2024.10.13 |
프로그래머스 SQL - 이름에 el이 들어가는 동물 찾기 (1) | 2024.10.12 |
CASE (+ 해커랭크 예제) (0) | 2024.10.12 |
프로그래머스 SQL - 조건에 부합하는 중고거래 상태 조회하기(Lv.2) (1) | 2024.10.11 |