문제 링크 :https://school.programmers.co.kr/learn/courses/30/lessons/157340
POINT.
- CASE/WHEN/THEN 사용 가능
- '2022-10-16' BETWEEN START_DATE AND END_DATE 작성 가능
코드.
SELECT CAR_ID, MAX(CASE
WHEN '2022-10-16' BETWEEN START_DATE AND END_DATE THEN '대여중'
ELSE '대여 가능'
END) AS AVAILABILITY
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
ORDER BY CAR_ID DESC;
내부 동작 순서
1. FROM 절
FROM 절 : CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 모든 데이터를 가져옵니다.
2. GROUP BY 절
CAR_ID를 기준으로 그룹화하여 동일한 CAR_ID를 가진 행들을 하나로 합침
3. SELECT 절
각 그룹에 대한 CAR_ID와 CASE/ WHEN/ THEN으로 처리된 컬럼 조회
(CASE WHEN THEN을 사용해 각 자동차 대여 기록에 대해 '2022-10-16' 날짜에 대여 중인지 여부를 확인, AVAILABILITY 컬럼의 값을 설정한다. 위 표의 분홍색 상자에 표시된 행들을 보면 CAR_ID 2번의 경우 '2022-10-16'에 대여 중이라 사용자가 해당 날짜에 대여할 수 없는 CAR_ID임을 알 수 있고 CAR_ID 3번의 경우 사용자가 해당 날짜에 대여할 수 있음을 알 수 있다.
MAX의 경우 '대여 가능'은 '대여중'보다 사전 순으로 더 큰 값이므로, 대여 중인 기록이 있는 ID의 경우 '대여중'이 최댓값이 된다. )
4. ORDER BY 절
최종 결과를 CAR_ID를 기준으로 내림차순으로 정렬
초기 코드
SELECT CAR_ID, AVAILABILITY
FROM
(SELECT *, CASE
WHEN '2022-10-16' BETWEEN START_DATE AND END_DATE THEN '대여중'
ELSE '대여 가능'
END AVAILABILITY
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID, AVAILABILITY
ORDER BY CAR_ID, AVAILABILITY DESC) INLINE_VIEW
GROUP BY CAR_ID
ORDER BY CAR_ID DESC
=> 정상 출력
CAR_ID | AVAILABILITY |
30 | 대여 가능 |
29 | 대여중 |
28 | 대여중 |
27 | 대여중 |
26 | 대여중 |
25 | 대여중 |
24 | 대여중 |
23 | 대여중 |
22 | 대여중 |
21 | 대여 가능 |
20 | 대여중 |
19 | 대여중 |
18 | 대여중 |
17 | 대여중 |
16 | 대여중 |
15 | 대여 가능 |
13 | 대여 가능 |
12 | 대여중 |
11 | 대여중 |
10 | 대여 가능 |
9 | 대여중 |
8 | 대여중 |
7 | 대여중 |
6 | 대여중 |
5 | 대여중 |
4 | 대여중 |
3 | 대여 가능 |
2 | 대여중 |
1 | 대여 가능 |
쿼리 개선 가능성 있음
1. 서브쿼리 절(인라인 뷰)에서 GROUP BY, ORDERY BY 절을 사용하지 않을 수 있다.
--> 외부에서도 GROUP BY가 중복으로 사용된다면 코드를 줄일 방법이 없는지 확인
2. 서브쿼리도 사용하지 않을 수 있다.
'◖코딩 테스트◗▬▬▬▬▬▬▬▬▬ > 프로그래머스' 카테고리의 다른 글
[SQL KIT] (2024) 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기(설명/코드/정답) (0) | 2024.01.24 |
---|---|
[프로그래머스] 깃허브 자동 커밋 연동(2024) (4) | 2024.01.23 |
[SQL KIT] (2024) 즐겨찾기가 가장 많은 식당 정보 출력하기(설명/코드/정답) (0) | 2024.01.21 |
[SQL KIT] (2024) 오프라인/온라인 판매 데이터 통합하기(설명/코드/정답) (0) | 2024.01.18 |
[SQL KIT] (2024) 재구매가 일어난 상품과 회원 리스트 구하기 (0) | 2024.01.17 |