728x90
반응형
SMALL

분석하기
조회할 데이터 : 월, 자동차ID, 대여횟수
대여 시작일을 기준으로 2022년 8월부터 2022년 10월까지
=> CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 대여 시작일이 2022년 8월 ~ 10월 사이의 데이터이어야 한다.
총 대여 횟수가 5회 이상인 자동차들에 대해서
=> 해당 날짜에 해당하는 데이터 수가 5개 이상인 자동차ID를 알아야 한다.
결과는 월을 기준으로 오름차순 정렬하고, 월이 같다면 자동차 ID를 기준으로 내림차순 정렬
=> 월은 ASC, 자동차ID DESC
전체 코드
SELECT EXTRACT(MONTH FROM START_DATE) AS MONTH, CAR_ID, COUNT(*) AS RECORDS
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE CAR_ID IN (
-- 해당 기간 동안 대여 횟수가 5회 이상인 자동차ID 조회
SELECT CAR_ID
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE BETWEEN TO_DATE('220801', 'YYMMDD') AND TO_DATE('221031', 'YYMMDD')
GROUP BY CAR_ID
HAVING COUNT(*) >= 5
)
GROUP BY EXTRACT(MONTH FROM START_DATE), CAR_ID -- 월별로 그룹화
HAVING EXTRACT(MONTH FROM START_DATE) BETWEEN 8 AND 10 -- 해당 월이 8월 ~ 10월 사이인 데이터들만 조회
ORDER BY MONTH, CAR_ID DESC;
실행 순서에 따른 설명
1. FROM 절
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
2. WHERE 절
WHERE CAR_ID IN (
-- 해당 기간 동안 대여 횟수가 5회 이상인 자동차ID 조회
SELECT CAR_ID
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE BETWEEN TO_DATE('220801', 'YYMMDD') AND TO_DATE('221031', 'YYMMDD')
GROUP BY CAR_ID
HAVING COUNT(*) >= 5
)
WHERE 절에서 해당 기간 동안 대여 횟수가 5회 이상인 자동차 ID를 조회하고 해당 자동차 ID와 일치하는 자동차ID를 찾는 조건식을 작성한다. TO_DATE('220801', 'YYMMDD') 이런식으로 문자열로 날짜를 지정하고 인수로 포맷방식을 작성한다. 이것을 BETWEEN AND 연산자를 사용하여 2022-08-01 ~ 2022-10-31 까지의 데이터를 구한다. 구한 데이터를 CAR_ID로 그룹화하고 해당 갯수가 5이상인 CAR_ID를 조회한다. 그렇게 조회된 CAR_ID와 일치하는 CAR_ID 전부를 찾기 위해 IN 연산자를 사용한다.
3. GROUP BY 절
GROUP BY EXTRACT(MONTH FROM START_DATE), CAR_ID -- 월별로 그룹화
WHERE 절에서 조회한 데이터들을 대여 시작일의 월과 자동차ID를 기준으로 그룹화를 해준다.
4. HAVING 절
HAVING EXTRACT(MONTH FROM START_DATE) BETWEEN 8 AND 10 -- 해당 월이 8월 ~ 10월 사이인 데이터들만 조회
그룹화를 한 후에 월 데이터가 8에서 10월 사이인 데이터를 조회하기 위한 조건을 추가한다.
5. SELECT 절
SELECT EXTRACT(MONTH FROM START_DATE) AS MONTH, CAR_ID, COUNT(*) AS RECORDS
문제에서 요구한 데이터들을 조회하는 SELECT 절을 작성한다.
6. ORDER BY 절
ORDER BY MONTH, CAR_ID DESC;
문제에서 요구한 데이터들의 정렬 조건을 작성한다.
728x90
반응형
LIST
'프로그래머스' 카테고리의 다른 글
[프로그래머스] SQL - 자동차 평균 대여 기간 구하기 (1) | 2025.03.13 |
---|---|
[프로그래머스] SQL - 조건에 부합하는 중고거래 댓글 조회하기(ORACLE) (0) | 2025.03.11 |