java 학습일기 day21 - SQL if와 inner join 문제풀기

이건구·2023년 9월 20일
0

오늘은 프로그래머스에서 sql문제 2문제를 풀어보겠습니다.

자동차 대여 기록에서 장기/단기 대여 구분하기

if를 사용하기.

문제 1. CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 대여 시작일이 2022년 9월에 속하는 대여 기록에 대해서 대여 기간이 30일 이상이면 '장기 대여' 그렇지 않으면 '단기 대여' 로 표시하는 컬럼(컬럼명: RENT_TYPE)을 추가하여 대여기록을 출력하는 SQL문을 작성해주세요. 결과는 대여 기록 ID를 기준으로 내림차순 정렬해주세요.

SELECT HISTORY_ID,
CAR_ID,
DATE_FORMAT(START_DATE, '%Y-%m-%d')
AS START_DATE,
DATE_FORMAT(END_DATE, '%Y-%m-%d')
AS END_DATE,
IF(DATEDIFF(END_DATE, START_DATE) >= 29, '장기 대여', '단기 대여')
AS RENT_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE MONTH(START_DATE) = 9
ORDER BY HISTORY_ID DESC

날짜포맷을 바꿔주는 함수 DATE_FORMAT()을 사용해주었다.

그리고 두날짜의 차이를 구해주는 함수 DATEDIFF를 사용하여 대여한날과 반납한날의 차이를 구해주었다.

구한 기간을 IF함수에 넣어 기간이 29보다 크거나 같으면 '장기 대여', 작으면 '단기 대여'가 출력되도록하고 이름은 RENT_TYPE이라고 했다. (대여한 날을 1일 로하기때문에 29로함)

그리고 문제에서 2022년 9월에 속하는 대여기록이라고 했기때문에 WHERE에 월을 구해주는 함수 MONTH() = 9로 해주었다.

대여기록 ID를 기준으로 내림차순 정렬이라 DESC를 붙여주고 끝.

문제 2. USED_GOODS_BOARD와 USED_GOODS_REPLY 테이블에서 2022년 10월에 작성된 게시글 제목, 게시글 ID, 댓글 ID, 댓글 작성자 ID, 댓글 내용, 댓글 작성일을 조회하는 SQL문을 작성해주세요. 결과는 댓글 작성일을 기준으로 오름차순 정렬해주시고, 댓글 작성일이 같다면 게시글 제목을 기준으로 오름차순 정렬해주세요.

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

아직 INNER JOIN이 익숙치않아서 일단은 테이블 두개를 합쳐주었다.

SELECT *
FROM USED_GOODS_BOARD
INNER JOIN USED_GOODS_REPLY
ON USED_GOODS_BOARD.BOARD_ID = USED_GOODS_REPLY.BOARD_ID

BOARD_ID를 기준을 두 테이블을 합쳐주었다

문제에서 게시글제목, 게시글ID, 댓글ID, 댓글 작성자 ID, 댓글내용, 댓글 작성일을 조회하라고하였으니 SELECT에

TITLE, (게시글제목)

USED_GOODS_BOARD.BOARD_ID, (게시글ID)

REPLY_ID,(댓글ID)

USED_GOODS_REPLY.WRITER_ID,(댓글 작성자 ID)

USED_GOODS_REPLY.CONTENTS,(댓글내용)

DATE_FORMAT(USED_GOODS_REPLY.CREATED_DATE, '%Y-%m-%d') (댓글 작성일 날짜를 포맷해줘야해서 이렇게함.)

를 추가해주고 문제에서 2022년 10월에 작성된 게시물이라고하였으니 WHERE 에 LIKE()함수를 사용해 2022-10으로 시작하는 문자열을 찾도록하였다.

마지막으로 댓글작성일을 기준으로 오름차순 정렬, 그다음으로는 게시물제목으로 오름차순 정렬이라고하였으니

ORDER BY를 해주었다. (오름차순의 ASC는 생략이가능하므로 생략함.)

0개의 댓글