Data house
[MYSQL] 역대급 어려운 문제 - WITH(임시테이블) 본문
728x90
진짜 어려웠다.. 이건 다시 공부해야한다.
with라는 임시테이블을 만들고 또 다시 쿼리문을 작성해야만 풀 수 있는 문제인데 질문하기 버튼에 사람들도 정답코드이지만 코드를 간결하게 정리하지 못한 것 같다.
문제
https://school.programmers.co.kr/learn/courses/30/lessons/151141#qna
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
/*
목적 : 자동차 대여 기록 별 대여 금액 구하기
아웃풋 : 대여 기록 ID와 대여 금액 리스트
조건
1.자동차 종류가 '트럭'
2.대여 금액을 기준으로 내림차순 정렬
3.대여 기록 ID를 기준으로 내림차순
*/
WITH base AS (
SELECT
HISTORY_ID,
CASE
WHEN DATEDIFF(end_date,start_date)+1 < 7 THEN '노할인'
WHEN DATEDIFF(end_date,start_date)+1 >= 7
AND DATEDIFF(end_date,start_date)+1 < 30 THEN '7일 이상'
WHEN DATEDIFF(end_date,start_date)+1 >= 30
AND DATEDIFF(end_date,start_date)+1 < 90 THEN '30일 이상'
WHEN DATEDIFF(end_date,start_date)+1 >= 90 THEN '90일 이상'
END discount_flg,
DAILY_FEE*(DATEDIFF(end_date,start_date)+1) AS before_discount_total_fee,
car_type
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY AS t1
INNER JOIN CAR_RENTAL_COMPANY_CAR AS t2
ON t1.car_id = t2.car_id AND car_type = '트럭'
)
SELECT
HISTORY_ID,
ROUND(before_discount_total_fee * (100 - IF(DISCOUNT_RATE IS NULL, 0, DISCOUNT_RATE))*0.01) AS FEE
FROM base AS t1
LEFT JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN AS t2
ON t1.car_type = t2.car_type AND t1.discount_flg = t2.duration_type
ORDER BY 2 DESC,1 DESC
'Computer Knowledge > 데이터베이스' 카테고리의 다른 글
[MYSQL] 그룹별 조건에 맞는 목록 출력 - 서브쿼리 (0) | 2023.05.15 |
---|---|
[MYSQL] 5월 매출 총매출 조회 - 서브 쿼리, GROUP BY (0) | 2023.05.15 |
[MYSQL] INNER, LEFT, RIGHT JOIN / ON, USING 차이 (0) | 2023.05.14 |
[MYSQL] 자동차 평균 대여 기간 - GROUP BY, DATEDIFF (0) | 2023.05.12 |
[MYSQL] 조건에 맞는 사용자 정보 조회 - CONCAT, JOIN (0) | 2023.05.12 |