몸과 마음이 건전한 SW 개발자

[SQL-GROUP BY] 프로그래머스 Lv. 3 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 [다시 풀어 보기] 본문

SQL/다시 풀어 보기

[SQL-GROUP BY] 프로그래머스 Lv. 3 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 [다시 풀어 보기]

스위태니 2024. 12. 22. 17:06

문제 링크

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

정답 코드

SELECT 
    CAR_ID, 
    IF(
        SUM(IF (START_DATE <= "2022-10-16" AND END_DATE >= "2022-10-16", 1, 0)), 
        "대여중", 
        "대여 가능"
    ) AS AVAILABILITY
FROM 
    CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY 
    CAR_ID
ORDER BY 
    CAR_ID DESC;

풀이 과정

 

  1. 중첩된 IF 논리:
    • 내부의 IF(START_DATE <= "2022-10-16" AND END_DATE >= "2022-10-16", 1, 0):
      • START_DATE와 END_DATE가 2022-10-16을 포함하는 경우 1, 그렇지 않으면 0 반환.
    • 이 값들의 합을 계산하여(SUM) 해당 CAR_ID의 모든 기록을 확인.
  2. 외부 IF 논리:
    • SUM 결과가 0보다 크면(즉, 최소한 하나의 기록이 "대여중" 조건을 만족) "대여중" 반환.
    • 그렇지 않으면 "대여 가능" 반환.
  3. GROUP BY:
    • 각 CAR_ID별로 데이터를 그룹화하여, 같은 자동차 ID의 여러 기록을 하나의 상태로 요약.
  4. ORDER BY:
    • 결과를 CAR_ID 기준 내림차순 정렬.

 

느낀점

  • 이렇게 IF와 SUM을 사용할 수 있다.