Notice
														
												
											
												
												
													Recent Posts
													
											
												
												
													Recent Comments
													
											
												
												
													Link
													
											
									| 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 | 
| 12 | 13 | 14 | 15 | 16 | 17 | 18 | 
| 19 | 20 | 21 | 22 | 23 | 24 | 25 | 
| 26 | 27 | 28 | 29 | 30 | 31 | 
													Tags
													
											
												
												- pandas profiling
- MySQL
- SQL
- 신경쓰기의 기술
- leetcode
- 코딩테스트연습
- 코딩테스트
- Product Demand
- HackerRank
- Inventory Optimization
- forecast
- SKU Consolidation
- 파이썬
- 당신의 인생이 왜 힘들지 않아야 한다고 생각하십니까
- tensorflow
- MS SQL Server
- ABC Analysis
- 프로그래머스
- TensorFlowGPU
- oracle
- ModelCheckPoint
- kaggle
- Gaimification
- Labor Management System
- 딥러닝
- 데이터분석
- ProfileReport
- 피그마인디언
- eda
- 웨어하우스 보관 최적화
													Archives
													
											
												
												- Today
- Total
오늘도 배운다
대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 / 프로그래머스, SQL, MySQL 본문
문제
source: 프로그래머
CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 대여 시작일을 기준으로 2022년 8월부터 2022년 10월까지 총 대여 횟수가 5회 이상인 자동차들에 대해서 해당 기간 동안의 월별 자동차 ID 별 총 대여 횟수(컬럼명:
RECORDS) 리스트를 출력하는 SQL문을 작성해주세요. 결과는 월을 기준으로 오름차순 정렬하고, 월이 같다면 자동차 ID를 기준으로 내림차순 정렬해주세요. 특정 월의 총 대여 횟수가 0인 경우에는 결과에서 제외해주세요.

제출답안(MySQL)
WITH 
    hist_aug_thru_oct
        AS 
            (SELECT 
                *, MONTH(start_date) AS month
            FROM 
                car_rental_company_rental_history
            WHERE
                MONTH(start_date) BETWEEN 8 AND 10),
                
    ls_car_over4_aug_thru_oct
        AS
            (SELECT car_id
            FROM hist_aug_thru_oct
            GROUP BY car_id
            HAVING COUNT(history_id) >= 5)
SELECT
    month, car_id, COUNT(history_id) AS record
FROM 
    hist_aug_thru_oct
WHERE
    car_id IN 
            (SELECT car_id
             FROM ls_car_over4_aug_thru_oct)
GROUP BY 
    month, car_id
    
ORDER BY
    month, car_id DESC
풀이(MySQL)
더보기
CTE1: 8월 ~ 10월에 대여된 차의 렌트 기록
WITH 
    hist_aug_thru_oct
        AS 
            (SELECT 
                *, MONTH(start_date) AS month
            FROM 
                car_rental_company_rental_history
            WHERE
                MONTH(start_date) BETWEEN 8 AND 10),>> 예시를 보면 car 1은 2022-07-27 ~ 2022-08-02 렌트되었고 이는 8월달 렌트 기록에 카운트되지 않았다
>> 따라서 '대여' 여부 기준: start_date의 month를 기준으로 판단함
>> 이후 메인 SQL 문장에서 month를 사용할 수 있게 CTE에 추가해두었음
CTE 2: 8~10월 간 5회 이상(4회 초과) 렌트 된 차의 id 목
    ls_car_over4_aug_thru_oct
        AS
            (SELECT car_id
            FROM hist_aug_thru_oct
            GROUP BY car_id
            HAVING COUNT(history_id) >= 5)>> CTE를 사용하지 않고 메인 구문에서 GROUP BY MONTH, car_id HAVING COUNT(history_id)>=5를 할 경우 매달 대여가 5회 된 이상 된 차의 데이터를 추출함
>> 따라서, 별도의 CTE를 통해 8~10월 전체에서 대여기간이 5회 이상인 차의 목록을 별도로 만들어 주었음
문제에서 요구한 대로 데이터를 추출
SELECT
    month, car_id, COUNT(history_id) AS record
FROM 
    hist_aug_thru_oct
WHERE
    car_id IN 
            (SELECT car_id
             FROM ls_car_over4_aug_thru_oct)
GROUP BY 
    month, car_id
    
ORDER BY
    month, car_id DESC
문제 바로가기(MySQL)
728x90
    
    
  '코딩테스트연습(SQL)' 카테고리의 다른 글
| 585. Investments in 2016 / LeetCode, SQL, MySQL (0) | 2023.04.10 | 
|---|---|
| 570. Managers with at Least 5 Direct Reports / LeetCode, SQL, MS SQL Server (0) | 2023.04.04 | 
| 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 / 프로그래머스, SQL, MySQL (0) | 2023.03.28 | 
| 자동차 대여 기록 별 대여 금액 구하기 / 프로그래머스, SQL, MySQL (0) | 2023.03.27 | 
| 저자 별 카테고리 별 매출액 집계하기 / 프로그래머스, SQL, MySQL (0) | 2023.03.26 | 
			  Comments
			
		
	
               
           
					
					
					
					
					
					
				 
								