nan + nan = 2nan

[프로그래머스/SELECT] 조건에 부합하는 중고거래 댓글 조회하기 본문

Database/SQL

[프로그래머스/SELECT] 조건에 부합하는 중고거래 댓글 조회하기

2nan 2024. 3. 25. 12:58
728x90


코드 입력

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 
JOIN USED_GOODS_REPLY AS UGR
    ON UGR.BOARD_ID = UGB.BOARD_ID
WHERE 1=1 
# AND YEAR(UGR.CREATED_DATE) = '2022' AND MONTH(UGR.CREATED_DATE) = '10' 
# AND UGR.CREATED_DATE BETWEEN '2022-10-01' AND '2022-10-31'
AND UGB.CREATED_DATE BETWEEN '2022-10-01' AND '2022-10-31'
# AND UGR.CONTENTS != ''
ORDER BY UGR.CREATED_DATE ASC, UGB.TITLE ASC;

 

이 문제를 처음 봤을 때, 쉽게 풀 수 있을 거라 생각했는데 무엇 때문인지 자꾸 틀렸다고 해서 애를 먹은 문제이다.

2개 테이블이 나왔기 때문에 JOIN 함수를 이용해주었고,

22년 10월 데이터를 조회하기 위에 WHERE 절에 BETWEEN 구문을 활용했다.

사수님께서 YEAR, MONTH 와 같은 연산 함수들을 WHERE 절에서 사용하면

나중에 데이터가 많아질 때 행 하나씩 연산을 하기 때문에 성능이 저하된다라고 하시면서

BETWEEN 구문을 활용하는게 성능 측면에서 나을 거라는 이야기를 해주셨다.

참고로 BETWEEN도 오랜만에 써서 문법을 까먹었는데, 

[COLUMN] BETWEEN A AND B 형식으로 사용하면 된다.

 

아직 성능 측면에서 생각할 단계는 아니지만,

그런 부분도 생각하면서 쿼리를 짜면 나중에도 좋은 습관이 들겠다는 생각이 들었다.

 


출처 : 프로그래머스

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

 

프로그래머스

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

programmers.co.kr

 

Comments