[프로그래머스] 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 오라클코드

mango·2023년 10월 13일

SQL

목록 보기
5/13

CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 2022년 10월 16일에 대여 중인 자동차인 경우 '대여중' 이라고 표시하고, 대여 중이지 않은 자동차인 경우 '대여 가능'을 표시하는 컬럼(컬럼명: AVAILABILITY)을 추가하여 자동차 ID와 AVAILABILITY 리스트를 출력하는 SQL문을 작성해주세요. 이때 반납 날짜가 2022년 10월 16일인 경우에도 '대여중'으로 표시해주시고 결과는 자동차 ID를 기준으로 내림차순 정렬해주세요.



🏁 Things I learnt

- case when

case when price in (
select max(price)
from sales 
group by id
)
then '최대가격'
else '최소가격'
end 

case when 에 in 절을 사용할 수 있다.



- group by

약간 distinct 의 역할도 해주는 것이 group by 이다.
이해는 밑에 코드 참조...
car_id에 따른 available 값이 모두 같으면
ex)
1 대여중
1 대여중
2 대여가능
2 대여가능

이런식일 때 distinct 역할을 group by car_id 로 대신 가능하다.



- 별칭

쿼리의 if절에서 별칭 사용할때는 as를 붙이지 않는다.
그리고 별칭은 영어는 그냥 써도 되고, 한글은 꼭 큰따옴표 "" 를 사용한다!!!!!!!!!!!!

1. case when 에서 
case when ~ then ~ else ~ end "date"

2. 그 외
max(price) as "max_price"
혹은
max(price) as max_price 





🏁 쿼리

- (1차)

select car_id, case when car_id in
(select car_id 
 from CAR_RENTAL_COMPANY_RENTAL_HISTORY
 where '20221016' BETWEEN to_char(START_DATE, 'YYYYMMDD') AND to_char(END_DATE, 'YYYYMMDD') 
)
then '대여중'
else '대여 가능' end "availability"
from CAR_RENTAL_COMPANY_RENTAL_HISTORY
group by car_id
order by 1 desc

-> 이것도 시간 오래걸리고 많이 틀렸는데, '대여 가능' 에서 띄어쓰기를 안해서 그런거였다; 문제 정확히 읽고 실수 하지 않기!

profile
The joy of knowing things

0개의 댓글