단 한개의 기록 확인하기

도로롱·2025년 8월 18일

⭐목적:

해당 섹션은 프로그래머스/리트코드/해커랭커 등 외부 사이트에서 SQL 오답 문제에 대한 오답을 적고, 어느 부분에서 막혔고, 무엇을 배웠는지에 대해 간략하게 기록 하기 위함임.


❤️오답노트 활용 팁

  1. 원인 분석에 집중하세요: 정답 코드를 이해하는 것보다 내가 왜 틀렸는지를 한두 줄이라도 직접 글로 써보는 과정이 가장 중요합니다. '실수했다'에서 그치지 않고 '왜 실수했는지'를 파고들어야 같은 실수를 반복하지 않습니다.

  2. 태그를 적극적으로 활용하세요: #JOIN, #서브쿼리, #날짜함수 와 같이 태그를 꾸준히 달아두면, 나중에 특정 개념이 약하다고 느낄 때 해당 태그가 달린 문제들만 모아서 복습할 수 있습니다.

  3. 주기적으로 다시 풀어보세요: 일주일 뒤, 한 달 뒤에 오답 노트를 보면서 코드를 보지 않고 다시 한번 풀어보세요. 완벽하게 풀 수 있다면 그 개념은 이제 당신의 것이 된 겁니다.

⭐ 오답 노트 TEMPLATE

📆 날짜: 2025-08-07

📌 문제 정보

  • 출처 및 번호: [예: 프로그래머스/자동차 대여 기록에서 대여중 ,대여 가능 여부 구분하기]
  • 문제 링크: [https://school.programmers.co.kr/learn/courses/30/lessons/157340]

📝 문제 요약

  • [예: '2022-10-16 기준 대여 가능한 자동차 확인하기']

❌ 나의 오답 코드

-- 여기에 내가 작성했던 틀린 코드를 그대로 붙여넣으세요.
with main as(

select

    car_id,

    start_date,

    end_date,

    case when start_date <=date_format('2022-10-16','%Y-%m-%d') and

    end_date >=date_format('2022-10-16','%Y-%m-%d') then '대여중'

    else '대여 가능'

    end as AVAILABILITY

from

    CAR_RENTAL_COMPANY_RENTAL_HISTORY 

order by 1 desc

)

select

    distinct

    car_id,

    first_value(AVAILABILITY) over (partition by car_id order by end_date desc) as AVAILABILITY

from

    main 

order by

    1 desc

🤔 오답 원인 분석
오류 메시지 또는 실패 원인: [예: 'end_date가 느린 날짜의 데이터를 이용가능 데이터 값으로 가져오는 논리, 즉 가장 최근에 반납된 기록의 상태가 그 자동차의 최종 상태일 것이라는 가정.']

근본적인 실수: [예: '가장 최근의 반납 기록이 마지막 상태가 아닐 수도 있음

1번 기록: 2022-10-10 ~ 2022-10-20 (반납일: 10-20) -> '대여중'

2번 기록: 2022-11-05 ~ 2022-11-15 (반납일: 11-15) -> '대여 가능' ---> 해당 값으로 매칭되면 틀릴 수도 있음]

✅ 정답 코드 및 핵심 로직

SELECT
    CAR_ID,
    CASE 
        WHEN MAX(AVAILABILITY_FLAG) = 1 THEN '대여중' --- ② 2022-10-16 기간이 있는 경우는 무조건 대여중
        ELSE '대여 가능'
    END AS AVAILABILITY
FROM (
    SELECT 
        CAR_ID,
        CASE 
            WHEN '2022-10-16' BETWEEN START_DATE AND END_DATE THEN 1
            ELSE 0 --- ① 대여 기간안에 속하면 1이라는 표시
        END AS AVAILABILITY_FLAG
    FROM 
        CAR_RENTAL_COMPANY_RENTAL_HISTORY
) AS SUBQUERY

GROUP BY 
    CAR_ID
ORDER BY 
    CAR_ID DESC;

  • 핵심 로직: 특정 기간 안에 속하는 지점을 숫자로 flag 표시하고, 그 값에 해당 하면 특정 str 지정

📚 핵심 개념 및 배운 점

  • 주요 함수/문법: flag 지정하는 법

  • 배운 점:
    특정 시점을 단순 첫번째, 마지막 데이터로 확인 할 수 없는 경우는 flag를 써서 해당 값이 어디에 해당 하는지 표시하는 방법에 대해 배웠다.


profile
질문 없는 성장은 없다. 3년차 데이터 분석가

0개의 댓글