[프로그래머스] 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기

2024. 9. 20. 23:06·알고리즘/SQL

 

Question

 

CAR_RENTAL_COMPANY_CAR 테이블과 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블과 CAR_RENTAL_COMPANY_DISCOUNT_PLAN 테이블에서 자동차 종류가 '세단' 또는 'SUV' 인 자동차 중 2022년 11월 1일부터 2022년 11월 30일까지 대여 가능하고 30일간의 대여 금액이 50만원 이상 200만원 미만인 자동차에 대해서 자동차 ID, 자동차 종류, 대여 금액(컬럼명: FEE) 리스트를 출력하는 SQL문을 작성해주세요. 결과는 대여 금액을 기준으로 내림차순 정렬하고, 대여 금액이 같은 경우 자동차 종류를 기준으로 오름차순 정렬, 자동차 종류까지 같은 경우 자동차 ID를 기준으로 내림차순 정렬해주세요.

 

 

Pseudocode

 

 

  1. 서브쿼리 b 생성:
    • car_rental_company_rental_history 테이블에서 car_id를 선택합니다.
    • 대여 시작일이 2022년 11월 30일 이후이거나 대여 종료일이 2022년 11월 1일 이전인 경우를 제외합니다.
    • 조건에 맞는 레코드 수를 카운트하여 temp라는 별칭을 부여합니다.
    • GROUP BY car_id를 사용하여 차량별로 그룹화하고, HAVING 절을 사용하여 temp가 0인 차량만 선택합니다.
  2. 메인 쿼리:
    • car_rental_company_car 테이블과 서브쿼리 b를 car_id를 기준으로 JOIN합니다.
    • car_rental_company_discount_plan 테이블과는 car_type을 기준으로 JOIN하여 30일 기준의 할인 계획을 연결합니다.
  3. 요금 계산:
    • 요금 = daily_fee * 30 * (100 - 할인율) / 100
    • CAST와 REPLACE를 사용하여 문자열로 된 할인율에서 '%'를 제거하고 숫자로 변환합니다.
    • 계산된 요금을 반올림하여 정수로 만듭니다.
  4. 조건:
    • 요금이 500,000 이상 2,000,000 이하인 차량만 선택합니다.
  5. 정렬:
    • 요금을 기준으로 내림차순 정렬하고, 같은 요금일 경우 car_type, 그 다음 car_id 순으로 내림차순 정렬합니다.

 

 

 

Code

 

SELECT a.car_id,
       a.car_type,
       round((daily_fee * 30 * (100 - CAST(replace(discount_rate, '%', '') AS unsigned))) / 100,
             0) AS fee
FROM car_rental_company_car a
         JOIN (SELECT car_id,
                      COUNT(
                              CASE
                                  WHEN start_date > '2022-11-30' OR end_date < '2022-11-01'
                                      THEN NULL
                                  ELSE 1
                                  END) AS temp
               FROM car_rental_company_rental_history
               GROUP BY car_id
               HAVING temp = 0) b ON a.car_id = b.car_id
         JOIN (SELECT *
               FROM car_rental_company_discount_plan
               WHERE duration_type LIKE '30%') c ON a.car_type = c.car_type
having 500000 <= FEE AND  FEE <= 2000000
ORDER BY 3 DESC, 2, 1 DESC

'알고리즘 > SQL' 카테고리의 다른 글

[프로그래머스] 상품을 구매한 회원 비율 구하기  (0) 2024.09.20
[프로그래머스] FrontEnd 개발자 찾기  (0) 2024.09.20
[프로그래머스] 자동차 대여 기록 별 대여 금액 구하기  (0) 2024.09.20
[프로그래머스] 대장균의 크기에 따라 분류하기 2  (0) 2024.09.20
[프로그래머스] 연도별 대장균 크기의 편차 구하기  (0) 2024.09.20
'알고리즘/SQL' 카테고리의 다른 글
  • [프로그래머스] 상품을 구매한 회원 비율 구하기
  • [프로그래머스] FrontEnd 개발자 찾기
  • [프로그래머스] 자동차 대여 기록 별 대여 금액 구하기
  • [프로그래머스] 대장균의 크기에 따라 분류하기 2
Noaahhh
Noaahhh
  • Noaahhh
    노아
    Noaahhh
  • 전체
    오늘
    어제
    • 분류 전체보기 (118)
      • 프로젝트 (4)
      • 알고리즘 (113)
        • SQL (108)
        • CP (5)
      • 자격증 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    아픈 동물 찾기
    카카오로그인
    ABC
    contest397
    SQL
    SQL문제
    querydsl
    Spring
    OAuth2.0
    프로그래머스
    집계함수
    atcoder beginner contest
    cp초보
    abc421
    PCSQL
    pasql
    JWT
    contest395
    spingboot
    코딩테스트
    PS
    어린 동물 찾기
    springboot
    JPQL
    경쟁적프로그래밍
    소셜로그인
    cp
    atcoder
    프로그래밍대회
    인증/인가
  • hELLO· Designed By정상우.v4.10.5
Noaahhh
[프로그래머스] 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기
상단으로

티스토리툴바