_Han_
나의 개발 노트
_Han_
  • 분류 전체보기 (273)
    • 데이터 엔지니어링 (30)
    • 인프라 (3)
    • 추천시스템 (11)
    • 코딩테스트 (146)
    • 부트캠프 회고 (15)
    • 회고 (4)
    • 자격증 (1)
    • 파이썬 프로그래밍 (6)
    • 통계 (2)
    • Git (21)
    • 유니티2D (33)

최근 글

반응형
hELLO · Designed By 정상우.
_Han_

나의 개발 노트

[코딩테스트] 프로그래머스 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 MySQL
코딩테스트

[코딩테스트] 프로그래머스 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 MySQL

2023. 2. 14. 15:15
반응형

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

 

프로그래머스

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

programmers.co.kr

SELECT
    DISTINCT(HISTORY.CAR_ID),
    IF(RENTAL.CAR_ID, '대여중', '대여 가능') AS AVAILABILITY
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY AS HISTORY
LEFT JOIN (
    SELECT CAR_ID
    FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
    WHERE DATE('2022-10-16') BETWEEN DATE(START_DATE) AND DATE(END_DATE)) AS RENTAL
ON HISTORY.CAR_ID = RENTAL.CAR_ID
ORDER BY HISTORY.CAR_ID DESC

저는 서브쿼리와 LEFT JOIN을 활용하여 문제를 해결하였습니다.

먼저 서브쿼리입니다.

SELECT CAR_ID
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE DATE('2022-10-16') BETWEEN DATE(START_DATE) AND DATE(END_DATE)

서브쿼리문은 START_DATE와 END_DATE 사이에 2022-10-16이 존재하는 CAR_ID만 추출합니다.

결과는 아래와 같습니다.

다시 원래 쿼리로 돌아와서

서브쿼리의 결과를 RENTAL로 별칭을 지정하고 원래의 테이블(CAR_RENTAL_COMPANY_RENTAL_HISTORY)을 HISTORY로 별칭을 지정한 뒤에 CAR_ID를 기준으로 LEFT JOIN을 수행합니다.

두 테이블을 LEFT JOIN 해서 나온 결과인 HISTORY.CAR_ID, RENTAL.CAR_ID을 확인해보면 다음과 같습니다.

서브쿼리로 만든 REANTAL테이블의 CAR_ID에 HISTORY의 CAR_ID가 존재한다면 CAR_ID가 출력이 되지만 아니라면 NULL 빈공간이 출력되는 것을 확인할 수 있습니다.

 

IF 문을 사용하여 RENTAL.CAR_ID가 TRUE라면 '대여중' 아니라면 '대여 가능'을 출력하고 DISTINCT(HISTORY.CAR_ID)를 하여 중복을 제거합니다.

 

마지막으로 ORDER BY문에서 HISTORY.CAR_ID를 내림차순 정렬하여 결과를 반환합니다.

반응형

'코딩테스트' 카테고리의 다른 글

[코딩테스트] 백준 A 와 B 2 파이썬(Python)  (0) 2023.02.16
[코딩테스트] 백준 소수인팰린드롬 파이썬(Python)  (0) 2023.02.15
[코딩테스트] 프로그래머스 대여기록이 존재하는 자동차 리스트 구하기 MySQL  (0) 2023.02.13
[코딩테스트] 프로그래머스 자동차 평균 대여 기간 구하기 MySQL  (0) 2023.02.12
[코딩테스트] 프로그래머스 둘만의 암호 파이썬(Python)  (0) 2023.02.11
    '코딩테스트' 카테고리의 다른 글
    • [코딩테스트] 백준 A 와 B 2 파이썬(Python)
    • [코딩테스트] 백준 소수인팰린드롬 파이썬(Python)
    • [코딩테스트] 프로그래머스 대여기록이 존재하는 자동차 리스트 구하기 MySQL
    • [코딩테스트] 프로그래머스 자동차 평균 대여 기간 구하기 MySQL
    _Han_
    _Han_
    학습한 것을 기록합니다.

    티스토리툴바