[SQL] 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기
2024. 5. 5. 19:51ㆍ코딩 테스트
문제



개념
- NOT 컬럼 IN ('A', 'B')
- 컬럼에서 A와 B를 제외한 값을 출력
- 단, 컬럼값 중에서 NULL이 존재할 경우 NULL값인 행도 제외됨.(ISNULL로 치환하여 조회 고려)
- NOT 컬럼 IN (SELECT 컬럼 FROM 테이블 WHERE 조건)
- 서브 쿼리 조건에 해당하지 않은 컬럼값을 출력
오답
WITH CAR_RENTAL AS
(
SELECT *
FROM CAR_RENTAL_COMPANY_CAR
JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY
USING(CAR_ID)
WHERE CAR_TYPE IN ('세단','SUV') -- 자동차 종류가 세단 또는 SUV
AND START_DATE >= '2022-11-30' -- 시작 날짜가 2022년 11월 30일 이후
OR END_DATA <= '2022-11-01' -- 종료 날짜가 2022년 11월 01일 이전
)
/*
만약 위와 같은 조건을 사용한다면
날짜 조건을 만족하는 값과 만족하지 않는 값,
둘 다를 가진 CAR_ID가 존재하여 문제 조건을 만족 못할 수 있다.
*/
정답
WITH CAR_RENTAL AS
(
SELECT *
FROM CAR_RENTAL_COMPANY_CAR
JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY
USING(CAR_ID)
WHERE CAR_TYPE IN ('세단','SUV')
AND CAR_ID NOT IN
(
SELECT CAR_ID
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE '2022-11-01' BETWEEN START_DATE AND END_DATE
OR '2022-11-30' BETWEEN START_DATE AND END_DATE
)
)
SELECT
DISTINCT CAR_ID,
CAR_TYPE,
FLOOR(DAILY_FEE * (100 - DISCOUNT_RATE) / 100) * 30 AS FEE
FROM CAR_RENTAL JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN USING(CAR_TYPE)
WHERE DURATION_TYPE = '30일 이상'
AND FLOOR(DAILY_FEE * (100 - DISCOUNT_RATE) / 100) * 30 >= 500000
AND FLOOR(DAILY_FEE * (100 - DISCOUNT_RATE) / 100) * 30 < 2000000
ORDER BY 3 DESC, 2, 1 DESC'코딩 테스트' 카테고리의 다른 글
| [SQL] 연도별 대장균 크기의 편차 구하기 (0) | 2024.05.05 |
|---|---|
| [SQL] 조건에 맞는 개발자 구하기(프로그래머스) (1) | 2024.05.05 |
| [SQL] 물고기 종류 별 대어 찾기 (0) | 2024.05.04 |
| [SQL] 입양 시각 구하기(2) (0) | 2024.05.04 |
| [SQL] 오프라인/온라인 판매 데이터 통합하기(프로그래머스) (0) | 2024.05.04 |