728x90
https://school.programmers.co.kr/learn/courses/30/lessons/157339
문제 조건
- 자동차 종류가 '세단' 또는 'SUV' 인 자동차
- 2022년 11월 1일부터 2022년 11월 30일까지 대여 가능
- 30일간의 대여
- 대여 금액이 50만원 이상 200만원 미만인 자동차
- 자동차 ID, 자동차 종류, 대여 금액(컬럼명: FEE) 리스트를 출력하는 SQL문
- 대여금액 내림차순, 자동차 종류 오름차순, 자동차 ID 내림차순
# 1.
select *
from CAR_RENTAL_COMPANY_CAR as C
where C.car_type in ('세단','SUV');
# 1. + 3.
select *
from CAR_RENTAL_COMPANY_CAR as C join (select car_type,DISCOUNT_RATE
from CAR_RENTAL_COMPANY_DISCOUNT_PLAN
where DURATION_TYPE = '30일 이상') as P
on C.car_type = P.car_type
# 5. 대여금액 = 1일금액 * 30 * (100-할인율) / 100
select C.car_id, C.car_type, round(C.daily_fee*30*(100-P.discount_rate)/100) as FEE
# 6.
order by FEE desc, C.car_type, C.car_id desc;
# 2. 2022-11-1 ~ 2022-11-30 일 기간 내에 대여 중인 차 제외
where c.CAR_ID not in (select CAR_ID
from CAR_RENTAL_COMPANY_RENTAL_HISTORY
where END_DATE > '2022-11-00'
and START_DATE < '2022-12-00')
# 4. TABLE이 그룹 전체가 되는 경우 HAVING 단독 사용 가능
# 이 경우 WHERE을 쓰면 "Unknown column 'FEE' in 'where clause'"
having FEE >= 500000 and FEE <= 2000000
SELECT문에서 정의한 열을 WHERE절에서 사용할 수 없다. 대신 HAVING 사용 가능하다.
정답!!
select C.car_id, C.car_type, round(C.daily_fee*30*(100-P.discount_rate)/100) as FEE
from CAR_RENTAL_COMPANY_CAR as C join (select car_type,DISCOUNT_RATE
from CAR_RENTAL_COMPANY_DISCOUNT_PLAN
where DURATION_TYPE = '30일 이상') as P
on C.car_type = P.car_type
where c.CAR_ID not in (select CAR_ID
from CAR_RENTAL_COMPANY_RENTAL_HISTORY
where END_DATE > '2022-11-00'
and START_DATE < '2022-12-00')
and C.car_type in ('세단','SUV')
having FEE >= 500000 and FEE <= 2000000
order by FEE desc, C.car_type, C.car_id desc;
728x90
반응형
'TIL - 프로그래밍 > SQL' 카테고리의 다른 글
[230228] MySQL 조건문 (IF문 / 중첩 IF문 / CASE문) (0) | 2023.02.28 |
---|---|
[230224] SQL - 특정 문자를 포함하는 LIKE, (0) | 2023.02.24 |
[프로그래머스] 카테고리 별 도서 판매량 집계하기 - MySQL (0) | 2023.02.20 |
[프로그래머스] 즐겨찾기가 가장 많은 식당 정보 출력하기 - SQL (0) | 2023.02.20 |
[230220] SQL : WHERE과 HAVING의 차이 (0) | 2023.02.20 |
댓글