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

 

프로그래머스

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

programmers.co.kr

코드설명

SELECT + INNER JOIN + DATE_FORMAT 를 활용하는 문제입니다.

 

  1. USED_GOODS_BOARD와 USED_GOODS_REPLY 테이블을 INNER JOIN을 사용하여 "BOARD_ID"를 기준으로 연결합니다.
  2. 연결된 결과에서 USED_GOODS_BOARD의 "CREATED_DATE"를 '%Y-%m' 형식으로 포맷하여 '2022-10'과 비교합니다.
  3. WHERE 절을 사용하여 "CREATED_DATE"가 '2022-10'인 행만 선택합니다.
  4. 선택된 행에서 필요한 열을 추출하여 출력합니다: "TITLE", "BOARD_ID", "REPLY_ID", "WRITER_ID", "CONTENTS", "CREATED_DATE" (포맷된 날짜).
  5. 마지막으로, ORDER BY 절을 사용하여 "UGR.CREATED_DATE"를 오름차순으로 정렬하고, 그 후 "UGB.TITLE"을 오름차순으로 정렬합니다.

 

문제에서 처음에는 LEFT JOIN을 사용했었는데, 그렇게 할경우 교집합에 해당하지 않더라도 모두 나오므로 불필요 로직이 추가됩니다. INNER JOIN을 활용합니다.

 

또한 문제에서 놓치지 않아야하는 점은, 게시글의 생성일자가 '2022-10'인 글입니다. 댓글이 아닙니다.

코드

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

 

 

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

 

-- 게시글 제목을 기준으로 오름차순 정렬하는 것을 놓쳐서, 오류를 찾았습니다.
SELECT UGB.TITLE, UGB.BOARD_ID, UGR.REPLY_ID, UGR.WRITER_ID, UGR.CONTENTS, DATE_FORMAT(UGR.CREATED_DATE, '%Y-%m-%d') AS CREATED_DATE
FROM USED_GOODS_BOARD AS UGB
INNER JOIN USED_GOODS_REPLY AS UGR
ON UGB.BOARD_ID = UGR.BOARD_ID
WHERE DATE_FORMAT(UGB.CREATED_DATE, '%Y-%m') = '2022-10'
ORDER BY UGR.CREATED_DATE ASC, UGB.TITLE ASC

+ Recent posts