프론트엔드 개발자 중규리 입니다 ദി ᷇ᵕ ᷆ ) 자세히보기

PS/문제풀이

프로그래머스 SQL 자동차 대여 기록 별 대여 금액 구하기

중규리 2024. 1. 12. 15:36

🐸 문제 정보

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

🤖 알고리즘

SQL

 

⏱️ 풀이 시간

-

 

📝 풀이

요 며칠 SQL 문제를 아주 공장처럼 풀고 NCS도 풀어보느라 글을 못올렸는데,

이 문제는 너무 어려워서 아카이빙 해두는게 좋을 것 같아 올리게 되었다.

 

기억해두면 좋을 내용은 아래와 같다.

  • LEFT OUTER JOIN으로 할인 정보를 조인했지만, 할인하지 않는 경우에는 NULL로 붙게된다.
    • 때문에 IFNULL 을 통해 할인이 없는 경우에 할인율을 0으로 치환해야한다.
  • DURATION_TYPEC이 숫자와 문자의 혼용인데, 여기서 숫자만 추출하기 위해 CAST를 사용했다.

 

🧑‍💻 나의 답

SELECT B.HISTORY_ID,
TRUNCATE(A.DAILY_FEE * (1 - (IFNULL(C.DISCOUNT_RATE, 0) / 100)) * (DATEDIFF(B.END_DATE, B.START_DATE) + 1), 0) AS FEE
FROM CAR_RENTAL_COMPANY_CAR A
JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY B
    ON A.CAR_ID = B.CAR_ID
    AND A.CAR_TYPE = '트럭'
LEFT OUTER JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN C
    ON A.CAR_TYPE = C.CAR_TYPE
    AND DATEDIFF(B.END_DATE, B.START_DATE) + 1 >= CAST(C.DURATION_TYPE AS UNSIGNED)
GROUP BY HISTORY_ID
ORDER BY FEE DESC, HISTORY_ID DESC

'PS > 문제풀이' 카테고리의 다른 글

백준 1034 램프 Python  (0) 2024.01.15
백준 18429 근손실 Python  (1) 2024.01.15
백준 1010 다리 놓기 Python  (1) 2024.01.10
백준 2805 나무 자르기 Python  (1) 2024.01.08
백준 20920 영단어 암기는 괴로워 Python  (0) 2024.01.08