코딩테스트 준비/SQL문법

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

SeoburiFaust 2024. 2. 15. 15:23

문제

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

 

프로그래머스

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

programmers.co.kr

접근방법

어려워서 gpt와 gemini에게 물어봤다. gemini 코드가 좀 더 다양한 케이스에 적용 가능해 보인다.

코드 (from gemini)

SELECT
  car_id,
  CASE
    WHEN EXISTS (
      SELECT *
      FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY h2
      WHERE h2.car_id = h.car_id
      AND h2.start_date <= '2022-10-16'
      AND (
        h2.end_date >= '2022-10-16'
        OR h2.end_date IS NULL
      )
    ) THEN '대여중'
    ELSE '대여 가능'
  END AS availability
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY h
group by car_id
ORDER BY car_id DESC;

코드 (from chatGpt)

SELECT CAR_ID,
       MAX(CASE
           WHEN START_DATE <= '2022-10-16' AND END_DATE >= '2022-10-16' THEN '대여중'
           ELSE '대여 가능'
       END) AS AVAILABILITY
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
ORDER BY CAR_ID DESC;

개선할 점

column을 추가할 때,

대여중과 대여 가능을 구별하기 위해서.

select문 안에 case문을 넣어서 해결하면 된다는 걸 알았다.

유용하게 쓰일 거 같다.