최대 1 분 소요

프로그래머스 사이트 링크

문제

image

image


코드

ver(1) - 서브쿼리 사용
-- CAR_ID와 AVAILABILITY 열을 선택합니다.
SELECT CAR_ID,
    -- 대여 중인 CAR_ID가 있는 경우 '대여중', 그렇지 않은 경우 '대여 가능'으로 표시합니다.
    (CASE WHEN CAR_ID IN (
        -- 서브쿼리로 대여 중인 CAR_ID를 선택합니다.
        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'
-- CAR_ID로 묶어줍니다.
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
-- CAR_ID를 내림차순으로 정렬합니다.
ORDER BY CAR_ID DESC

ver(2) - MAX 사용
-- CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 CAR_ID를 그룹화합니다.
-- 각 CAR_ID마다 해당 날짜에 대여 가능 여부를 구합니다.
SELECT CAR_ID,
  -- MAX 함수를 사용하여 CASE문 결과 중 가장 큰 값을 선택합니다.
  MAX(CASE 
      -- 현재 날짜가 대여 시작일과 종료일 사이에 있는 경우 대여 중으로 표시합니다.
      WHEN '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
-- CAR_ID로 그룹화한 뒤 결과를 CAR_ID 내림차순으로 정렬합니다.
GROUP BY CAR_ID
ORDER BY CAR_ID DESC;

댓글남기기