CodingTest/SQL 고득점 Kit

조건에 부합하는 중고거래 댓글 조회하기

  • -
728x90

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

 

프로그래머스

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

programmers.co.kr

문제는 위 링크와 같다.

 

이번 문제는 보자마자 조인을 떠올려서 쉽게 풀 수 있던 문제였다. 두 테이블이 겹치는 열이 많아 각 변수 별로 어떤 테이블에서 가져와 주어야 하는지 약간 햇갈렸는데 단순히 내가 문제를 잘 읽지 않은 탓이다.. 반성!!

아무튼 내가 푼 정답은 다음과 같다.

 

정답

-- 코드를 입력하세요
SELECT TITLE, 
    UGR.BOARD_ID, 
    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 YEAR(UGB.CREATED_DATE) = 2022 and MONTH(UGB.CREATED_DATE) = 10
ORDER BY 6, 1;

 

풀이

BOARD_ID를 기준으로 INNER JOIN을 이용하였고 WHERE 절의 조건의 경우는 그냥 YEAR과 MONTH 함수로 조건을 걸어줬다.

조인만 할 줄안 다면 쉽게 풀 수 있는 문제였다. 어떤 분은 WHERE 절에다가 DATE_FORMAT 함수를 활용해 조건을 걸었는데 이는 날짜를 문자열로 형식화하고 문자열 비교를 수행하는 것으로 개인적으로 내가 쓴 답보다는 최적화 측면에서 효율이 떨어진다고 생각한다. 일단 복수 답안은 맞으니 아래에 첨부하겠다.

 

SELECT TITLE, 
    UGR.BOARD_ID, 
    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') LIKE '2022-10%'
ORDER BY 6, 1;
728x90
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.