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
반응형
'PS > SQL' 카테고리의 다른 글
[SQL] 조건에 맞는 회원수 구하기 (0) | 2024.01.31 |
---|---|
[SQL] 재구매가 일어난 상품과 회원 리스트 구하기 (0) | 2024.01.29 |
[SQL] 3월에 태어난 여성 회원 목록 출력하기 (1) | 2024.01.28 |
[SQL] 12세 이하인 여자 환자 목록 출력하기 (0) | 2024.01.28 |
[SQL] 조건에 맞는 도서 리스트 출력하기 (2) | 2024.01.28 |