SQL

[프로그래머스 - 133027, 144856, 151141, 157339]. SQL

date
Jun 21, 2023
slug
2306210001
status
Public
tags
코테
author
summary
230621 프로그래머스 SQL 풀이 입니다
type
Post
thumbnail
updatedAt
Jun 23, 2023 04:53 AM
category
SQL
Programmers
lv4

 

133027. 주문량이 많은 아이스크림을 조회하기


-- 7월 총 주문량 + 상반기 아이스크림 상위 3개의 맛 -- SELECT FLAVOR -- ORDER BY 총 주문량 desc SELECT FLAVOR FROM ( SELECT j.shipment_id, j.flavor, sum((j.total_order + ifnull(f.total_order, 0))) 'total_count' FROM july j LEFT OUTER JOIN first_half f ON f.shipment_id = j.shipment_id GROUP BY j.flavor ORDER BY total_count DESC LIMIT 3 ) `solution`;
 
 

144856. 저자 별 카테고리 별 매출액 집계


-- 2022년 1월, 저자 별, 카테고리 별 매출액을 구해라 -- order by 저자, category desc; -- AUTHOR_ID, AUTHOR_NAME, CATEGORY, TOTAL_SALES SELECT A.AUTHOR_ID, A.AUTHOR_NAME, SALES.CATEGORY, SUM(TOTAL_SALES) 'TOTAL_SALES' FROM author a, ( SELECT B.AUTHOR_ID, B.CATEGORY, (B.PRICE * S.SALES) 'TOTAL_SALES' FROM book b, book_sales s WHERE b.book_id = s.book_id and s.sales_date like '2022-01%') sales WHERE a.author_id = sales.author_id GROUP BY a.author_id, a.author_name, sales.category ORDER BY a.author_id, sales.category desc;
 
 

151141. 자동차 대여 기록 별 대여 금액 구하기


-- SELECT HISTORY_ID, FEE -- ORDER BY FEE desc, HISTORY_ID desc; WITH HISTORY_WITH_CAR_INFO AS ( SELECT history_id, c.car_id, c.car_type, c.daily_fee, datediff(end_date, start_date) + 1 'period', CASE WHEN datediff(end_date, start_date) + 1 < 7 THEN NULL WHEN datediff(end_date, start_date) + 1 < 30 THEN '7일 이상' WHEN datediff(end_date, start_date) + 1 < 90 THEN '30일 이상' ELSE '90일 이상' END 'duration_type' FROM CAR_RENTAL_COMPANY_CAR c, CAR_RENTAL_COMPANY_RENTAL_HISTORY h WHERE c.car_id = h.car_id and car_type = '트럭' ) SELECT history_id, (daily_fee * ( 100 - ifnull(discount_rate, 0)) div 100 ) * period 'FEE' FROM HISTORY_WITH_CAR_INFO T1 LEFT OUTER JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN T2 ON T1.car_type = T2.car_type and T1.duration_type = T2.duration_type ORDER BY fee desc, history_id desc;
 

157339. 특정 기간동안 대여 가능한 자동차들의 대여비용


# CAR_TYPE이 'SUV', '세단' 중, 2022-11-01 ~ 2022-11-30간 대여가 가능하고, 대여 금액이 50 <= x < 200 인 자동차 -- SELECT CAR_ID, CAR_TYPE, FEE -- ORDER BY FEE desc, CAR_TYPE, CAR_ID desc SELECT c.CAR_ID, c.CAR_TYPE, daily_fee * 30 * (100 - discount_rate) div 100 'FEE' FROM CAR_RENTAL_COMPANY_CAR c, CAR_RENTAL_COMPANY_DISCOUNT_PLAN p WHERE c.car_type = p.car_type and c.CAR_TYPE in ('SUV', '세단') and duration_type = '30일 이상' and CAR_ID not in ( SELECT car_id FROM car_rental_company_rental_history WHERE not (start_date > '2022-11-30' or end_date < '2022-11-01') ) HAVING fee >= 500000 and fee < 2000000 ORDER BY fee desc, c.CAR_TYPE asc, c.CAR_ID desc
 
  • 22년 11월 1일 ~ 22년 11월 30일 안의 대여 일자가 포함되면 안된다.
    • → 해당 부분만 처리하면 수월한 문제