1. 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기(Level 4)
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
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를 기준으로 내림차순 정렬해주세요.
-- S: CAR_ID, CAR_TYPE, FEE(대여 금액)
-- F: CAR_RENTAL_COMPANY_CAR & CAR_RENTAL_COMPANY_RENTAL_HISTORY & CAR_RENTAL_COMPANY_DISCOUNT_PLAN
-- W: CAR_TYPE = '세단' OR 'SUV' & 대여가능기간 = '2022-11-01' TO '2022-11-30'
-- 30일간의 대여 금액 = '50' 이상 '200' 미만
-- O: FEE DESC, CAR_TYPE ASC, CAR_ID DESC
SELECT CC.CAR_ID, CC.CAR_TYPE, FLOOR(CC.DAILY_FEE * (1 - CP.DISCOUNT_RATE / 100) * 30) AS FEE
FROM CAR_RENTAL_COMPANY_CAR CC LEFT JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN CP ON CC.CAR_TYPE = CP.CAR_TYPE
WHERE CAR_ID NOT IN(
SELECT CC.CAR_ID
FROM CAR_RENTAL_COMPANY_CAR CC LEFT JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY CH ON CC.CAR_ID = CH.CAR_ID
WHERE CH.END_DATE >= '2022-11-01' AND CH.START_DATE <= '2022-11-30')
AND CP.DURATION_TYPE = '30일 이상'
AND FLOOR(CC.DAILY_FEE * (1 - CP.DISCOUNT_RATE / 100) * 30) >= 500000
AND FLOOR(CC.DAILY_FEE * (1 - CP.DISCOUNT_RATE / 100) * 30) < 2000000
ORDER BY FEE DESC, CC.CAR_TYPE ASC, CC.CAR_ID DESC
NOTE: 대여가능기간 = END_DATE가 '2022-11-01' 이전 OR START_DATE가 '2022-11-30' 이후 > 불가능한 ID 제외
30일간의 대여 금액 = DURATION_TYPE이 '30일 이상'인 경우 CAR_TYPE별로 DISCOUNT_RATE 곱
2. 그룹별 조건에 맞는 식당 목록 출력하기(Level 4)
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
MEMBER_PROFILE와 REST_REVIEW 테이블에서 리뷰를 가장 많이 작성한 회원의 리뷰들을 조회하는 SQL문을 작성해주세요. 회원 이름, 리뷰 텍스트, 리뷰 작성일이 출력되도록 작성해주시고, 결과는 리뷰 작성일을 기준으로 오름차순, 리뷰 작성일이 같다면 리뷰 텍스트를 기준으로 오름차순 정렬해주세요.
-- S: MEMBER_NAME, REVIEW_TEXT, REVIEW_DATE
-- F: MEMBER_PROFILE & REST_REVIEW
-- W: 리뷰를 가장 많이 작성한 회원
-- O: REVIEW_DATE ASC, REVIEW_TEXT ASC
SELECT M.MEMBER_NAME, R.REVIEW_TEXT, DATE_FORMAT(R.REVIEW_DATE, '%Y-%m-%d') AS REVIEW_DATE
FROM REST_REVIEW R LEFT JOIN MEMBER_PROFILE M ON R.MEMBER_ID = M.MEMBER_ID
WHERE (R.MEMBER_ID, 1) IN (
SELECT MEMBER_ID, RANK() OVER (ORDER BY COUNT(REVIEW_TEXT) DESC) AS CNT
FROM REST_REVIEW
GROUP BY MEMBER_ID)
ORDER BY REVIEW_DATE ASC, REVIEW_TEXT ASC
NOTE: WHERE절 서브쿼리 다중 컬럼 비교하는 방법 확인
리뷰를 가장 많이 작성한 회원 = RANK()함수를 사용했을 때 결과값이 1인 MEMEBER_ID -> WHERE절에서 필터링
'코딩테스트' 카테고리의 다른 글
25/05/09 프로그래머스 SQL 고득점 Kit (0) | 2025.05.09 |
---|---|
25/04/30 프로그래머스 SQL 고득점 Kit (0) | 2025.04.30 |
25/04/27 프로그래머스 SQL 고득점 Kit (0) | 2025.04.27 |