728x90
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/151139
문제
CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서
① 대여 시작일을 기준으로
② 2022년 8월부터 2022년 10월까지
③ 총 대여 횟수가 5회 이상인 자동차들에 대해서
④ 해당 기간 동안의 월별 자동차 ID 별 총 대여 횟수(컬럼명: RECORDS) 리스트를 출력
하는 SQL문을 작성해주세요.
⑤ 결과는 월을 기준으로 오름차순 정렬하고, 월이 같다면 자동차 ID를 기준으로 내림차순 정렬해주세요.
⑥ 특정 월의 총 대여 횟수가 0인 경우에는 결과에서 제외해주세요.
① ~ ③ 번과 ④번 쿼리를 나눠서 작성하는 생각을 해야한다.
⑤번 조건은 마지막에 정렬해도 되니 빼놓고 생각하자.
① ~ ③ 번 조건의 쿼리를 작성
SELECT
CAR_ID
, COUNT(CAR_ID) AS CNT
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE 1=1
AND START_DATE BETWEEN DATE("2022-08-01") AND DATE("2022-10-31")
AND END_DATE > DATE("2022-07-31")
GROUP BY CAR_ID
HAVING COUNT(CAR_ID) >= 5
이렇게 하면
대여 시작일 기준으로 22년 8월부터 10월까지 5번 이상 빌린 차량을 구할 수 있다.
④번 쿼리 작성
SELECT
COUNT(CAR_ID) AS CNT
,HISTORY_ID
,CAR_ID
,MONTH(START_DATE) AS MONTH
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE 1=1
AND START_DATE BETWEEN DATE("2022-08-01") AND DATE("2022-11-01")
AND END_DATE > DATE("2022-07-31")
GROUP BY HISTORY_ID, CAR_ID, START_DATE, END_DATE
이렇게 작성하면
월별 자동차별 사용 카운트가 나오게 된다.
근데 우리는 월별 자동차별 사용 카운트 합계를 구해야 한다.
이제 1~3번 쿼리와 4번을 조인하여 5번 조건을 추가하면 된다.
SELECT
CARMONTH.MONTH
, FIVEOVER.CAR_ID
, CARMONTH.RECORDS
FROM (
SELECT
CAR_ID
, COUNT(CAR_ID) AS CNT
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE 1=1
AND START_DATE BETWEEN DATE("2022-08-01") AND DATE("2022-10-31")
AND END_DATE > DATE("2022-07-31")
GROUP BY CAR_ID
HAVING COUNT(CAR_ID) >= 5
) FIVEOVER
, (
SELECT SUM(GETSUM.CNT) AS RECORDS
, GETSUM.CAR_ID AS CAR_ID
, GETSUM.MONTH AS MONTH
FROM (
SELECT
COUNT(CAR_ID) AS CNT
,HISTORY_ID
,CAR_ID
,MONTH(START_DATE) AS MONTH
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE 1=1
AND START_DATE BETWEEN DATE("2022-08-01") AND DATE("2022-11-01")
AND END_DATE > DATE("2022-07-31")
GROUP BY HISTORY_ID, CAR_ID, START_DATE, END_DATE
) GETSUM
WHERE 1=1
GROUP BY GETSUM.CNT, GETSUM.CAR_ID, GETSUM.MONTH
) CARMONTH
WHERE 1=1
AND FIVEOVER.CAR_ID = CARMONTH.CAR_ID
ORDER BY CARMONTH.MONTH ASC, FIVEOVER.CAR_ID DESC;
728x90
반응형
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/java] 저주의 숫자 3 (0) | 2023.12.19 |
---|---|
[프로그래머스/MySQL] 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기 (0) | 2023.06.09 |
[프로그래머스/java] 멀리 뛰기 (0) | 2022.10.12 |
[프로그래머스/java] JadenCase 문자열 만들기 (0) | 2022.09.10 |
[프로그래머스/java] 거리두기 확인하기 - 카카오 기출 (0) | 2022.08.28 |
댓글