🐸 문제 정보
🤖 알고리즘
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 |