728x90
📚문제
📝풀이
SELECT EXTRACT(MONTH FROM START_DATE) AS MONTH
#MONTH(start_date) AS MONTH
, CAR_ID
, COUNT(*) RECORDS
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE EXTRACT(MONTH FROM START_DATE) IN (8,9,10)
#WHERE DATE_FORMAT(start_date, "%Y-%m") BETWEEN '2022-08' AND '2022-10'
AND CAR_ID IN (SELECT CAR_ID
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE EXTRACT(MONTH FROM START_DATE) IN (8,9,10)
GROUP BY CAR_ID
HAVING COUNT(*) >=5 )
GROUP BY EXTRACT(MONTH FROM START_DATE),CAR_ID
ORDER BY MONTH, CAR_ID DESC
어제 문제에서 잠깐 본 WHERE절 서브쿼리를 활용해서 푼 것이 너무 뿌듯하다...!!!
오래 안 걸려서 다행이다ㅎㅎ
한가지 주의해야 될 것은
나와 같은 실수를 하신 분이 계셔서 가져왔다
서브쿼리에서 8,9,10월 (3개월)에 걸쳐서 대여횟수가 5회이상인 차의 ID를 가져왔지만
본쿼리에서도 WHERE절에 8,9,10월이라는 조건을 걸지 않으면 7월에 대여횟수가 있을경우
SELECT EXTRACT(MONTH FROM START_DATE) AS MONTH
이 구문에서 7월이 같이 들어간다 뜻인것같다
SELECT MONTH(START_DATE) AS MONTH
, CAR_ID
, COUNT(*) AS RECORDS
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE MONTH(START_DATE) IN (8,9,10)
AND CAR_ID IN (SELECT CAR_ID
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE MONTH(START_DATE) IN (8,9,10)
GROUP BY CAR_ID
HAVING COUNT(*) >= 5)
GROUP BY MONTH(START_DATE), CAR_ID
ORDER BY MONTH, CAR_ID DESC
이전에 풀었을 때랑 다르게
서브쿼리절 밖 메인쿼리에서도
WHERE절 필터링(8월,9월,10월)은 잊지 않고 잘 걸어주었다
근데
급하게 문제를 풀다보니 이해를 어영부영하고 넘어가서 한 번 틀렸다
💡요점
우선 서브쿼리에서
8월,9월,10월 3개월에 걸쳐서 자전거를 대여한 횟수가 5회 이상인 ID를 찾는다
그 다음에 메인쿼리에서
월별/ID별로 그룹화하여 월별/ID별 몇회를 대여했는지를 구해야하는 문제이다
예를 들어서 CAR_ID 11이 3달에 걸쳐 총 6회 대여했다면
서브쿼리절에서 조건을 만족한 다음
메인쿼리에서
8월에 2번
9월에 3번
10월에 1번
이런식으로 월별 대여횟수를 구해주면 된다
728x90
'SQL > 프로그래머스 SQL 고득점 kit' 카테고리의 다른 글
SQL 고득점 Kit / 입양 시각 구하기(2) / MySQL (변수선언 , SELECT문 서브쿼리) (0) | 2023.10.31 |
---|---|
SQL 고득점 Kit / GROUP BY / 년,월,성별 별 상품 구매 회원 수 구하기 /MySQL (0) | 2023.10.31 |
SQL 고득점 kit / GROUP BY / 즐겨찾기가 가장 많은 식당 정보 출력하기 / MySQL (GROUP BY, 서브쿼리) (0) | 2023.10.26 |
SQL 고득점 Kit / SELECT / 오프라인-온라인 판매 데이터 통합하기 / MySQL (0) | 2023.10.20 |
SQL 고득점 Kit / SELECT / 재구매가 일어난 상품과 회원 리스트 구하기 / MySQL (0) | 2023.10.19 |