본문 바로가기

개발자 강화/코딩 테스트

[SQL] GROUP BY - 자동차 대여 기록에서 대여중/대여 가능 여부 구분하기 - 프로그래머스

그룹바이라는 스타트업도 있는데..

 

자동차 대여 기록에서 대여중/대여 가능 여부 구분하기

SELECT CAR_ID,
(CASE 
 WHEN CAR_ID IN(
    SELECT CAR_ID
    FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
    WHERE '2022-10-16' 
        BETWEEN DATE_FORMAT(START_DATE, '%Y-%m-%d') 
        AND DATE_FORMAT(END_DATE, '%Y-%m-%d'))
    THEN '대여중'
    ELSE '대여 가능'
END) AS 'AVAILABILITY'
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY

GROUP BY CAR_ID
ORDER BY CAR_ID DESC

 

갑자기 난이도 상승함

 

  • 1. SELECT CAR_ID, ... AS 'AVAILABILITY'
    • 각 차량(CAR_ID)의 ID와 그 대여 상태를 조회
    • 전체 틀은 CAR_ID와 조건에 맞는 ~~를 AVAILABILITY로 조회한다는 뜻
  • 2. CASE문
    • CASE문을 통해 차량의 대여 상태를 결정
    • CAR_ID가 IN절에 포함되면 '대여중'으로, 그렇지 않으면 '대여 가능'으로 표시
  • 3. IN 절 내부의 서브쿼리
    • ICAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 특정 날짜(2022-10-16)에 대여 중인 차량 ID 목록
    • WHERE '2022-10-16' BETWEEN DATE_FORMAT(START_DATE, '%Y-%m-%d')  AND DATE_FORMAT(END_DATE, '%Y-%m-%d')
      • 각 값에 대해 WHERE 조건 BETEERN 범위1 AND 범위2 - 범위1과 범위2 사이 조건이 포함되어 있는지 확인
        • 포함=대여중, 아님=대여가능
      • DATE_FORMAT 함수를 사용하여 START_DATE와 END_DATE를 'YYYY-MM-DD' 형식으로 포맷
      • 2022-10-16이 그 사이에 있는지 확인
  • 4. GROUP BY CAR_ID
    • 차량 ID(CAR_ID)를 기준으로 그룹화하여 차량별로 상태를 조회
  • 5. ORDER BY CAR_ID DESC
    • 차량 ID를 내림차순(DESC)으로 정렬