문제
https://school.programmers.co.kr/learn/courses/30/lessons/157339#qna
접근방법
복잡한 문제였다. 여태 푼 sql문제 중 가장 오래걸렸다.
처음 접근 할 때, natural join을 이용해서 풀려고 해봤는데, 잘 안 됐다.
또 discount_rate이 문자열 데이터인 줄 착각해서 좀 헤메기도 했다.
문제를 다시보니 정수 데이터였다.
다음부턴 문제를 잘 봐야겠다.
그래서 다른 사람 풀이를 참고했다.
from 문에서 join하기 전에 subquery를 만들어 해결하는 것을 보고 영감을 받았다.
코드
select car_id, car_type, floor(daily_fee * 30 * (1 - discount_rate/100)) as fee
from (select *
from car_rental_company_car
where car_type in ('세단', 'SUV')
and car_id not in
(select car_id
from car_rental_company_rental_history
where start_date <= '2022-11-30' and end_date >= '2022-11-1')) as A
join (select *
from car_rental_company_discount_plan
where duration_type = '30일 이상'
) as B using(car_type)
where daily_fee * 30 * (1 - discount_rate/100) between 500000 and 1999999
order by fee desc, car_type, car_id desc
개선할 점
기억해야 할 것.
1. floor : 소수점을 지워 정수로 만들어 준다. 유용할 것 같다.
2. 대여 가능한 car_id를 찾기 위해 start_date와 end_date가 해당 범위와 곂치는 지 알아야 하는데,
여기서 부등호를 착각하기 쉽다.
다음부턴 이 점을 유의하자.
3. from에서 subquery를 만들어 놓는 것이 편리할 때가 있다.
'코딩테스트 준비 > SQL문법' 카테고리의 다른 글
[프로그래머스 LV3] - 조건에 맞는 사용자 정보 조회하기(string, date) SQL (0) | 2024.02.18 |
---|---|
[프로그래머스 LV5] - 상품을 구매한 회원 비율 구하기(join) SQL (0) | 2024.02.17 |
[프로그래머스] - 자동차 대여 기록에서 장기/단기 대여 구분하기 SQL - String, Date (0) | 2024.02.16 |
[프로그래머스] - 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 (group by) SQL (0) | 2024.02.15 |
[프로그래머스] - 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기(group by) SQL (0) | 2024.02.15 |