본문 바로가기
데이터분석/TIL

240806 TIL

by Freely_ 2024. 8. 6.
728x90
반응형
 

프로그래머스

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

programmers.co.kr

CAR_RENTAL_COMPANY_CAR 테이블
CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블
CAR_RENTAL_COMPANY_DISCOUNT_PLAN 테이블

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를 기준으로 내림차순 정렬해주세요.

 

  • 풀이
SELECT a.car_id, a.car_type, round(a.daily_fee*(1-c.discount_rate/100)*30) fee
FROM car_rental_company_car a
    JOIN car_rental_company_rental_history b ON a.car_id=b.car_id
    JOIN car_rental_company_discount_plan c ON a.car_type=c.car_type
WHERE a.car_id not in (SELECT car_id
                        FROM car_rental_company_rental_history
                        WHERE end_date >= '2022-11-01' and start_date <= '2022-11-30') AND c.duration_type like '30%'
GROUP BY a.car_id
HAVING a.car_type in ('세단', 'SUV') and (fee >= 500000 and fee < 2000000)
ORDER BY 3 desc, 2, 1 desc

 

프로그래머스

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

programmers.co.kr

CAR_RENTAL_COMPANY_CAR 테이블
CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블
CAR_RENTAL_COMPANY_DISCOUNT_PLAN 테이블

CAR_RENTAL_COMPANY_CAR 테이블과 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블과 CAR_RENTAL_COMPANY_DISCOUNT_PLAN 테이블에서 자동차 종류가 '트럭'인 자동차의 대여 기록에 대해서 대여 기록 별로 대여 금액(컬럼명: FEE)을 구하여 대여 기록 ID와 대여 금액 리스트를 출력하는 SQL문을 작성해주세요. 결과는 대여 금액을 기준으로 내림차순 정렬하고, 대여 금액이 같은 경우 대여 기록 ID를 기준으로 내림차순 정렬해주세요.

 

  • 풀이
with car as (
    SELECT a.car_type, a.daily_fee, b.history_id, 
        datediff(b.end_date, b.start_date)+1 period, 
    case when datediff(b.end_date, b.start_date)+1 >= 90 then '90일 이상'
    when datediff(b.end_date, b.start_date)+1 >= 30 then '30일 이상'
    when datediff(b.end_date, b.start_date)+1 >= 7 then '7일 이상'
    else 'none' end duration_type
FROM car_rental_company_car a 
JOIN car_rental_company_rental_history b 
ON a.car_id=b.car_id
where a.car_type = '트럭')


select c.history_id,
round(c.daily_fee*c.period*(1-ifnull(p.discount_rate,0)/100)) fee
from car c 
left join car_rental_company_discount_plan p 
on c.car_type=p.car_type and c.duration_type=p.duration_type
order by 2 desc, 1 desc

 

프로그래머스

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

programmers.co.kr

USER_INFO 테이블
ONLINE_SALE 테이블

USER_INFO 테이블과 ONLINE_SALE 테이블에서 2021년에 가입한 전체 회원들 중 상품을 구매한 회원수와 상품을 구매한 회원의 비율(=2021년에 가입한 회원 중 상품을 구매한 회원수 / 2021년에 가입한 전체 회원 수)을 년, 월 별로 출력하는 SQL문을 작성해주세요. 상품을 구매한 회원의 비율은 소수점 두번째자리에서 반올림하고, 전체 결과는 년을 기준으로 오름차순 정렬해주시고 년이 같다면 월을 기준으로 오름차순 정렬해주세요.

 

  • 풀이(오답)
SELECT date_format(o.sales_date, '%Y') YEAR, 
        date_format(o.sales_date, '%m') MONTH,
        count(u.user_id) PURCHASED_USERS,
        round(count(u.user_id)/(SELECT count(*) FROM user_info WHERE joined like '2021%'), 1) PUCHASED_RATIO
FROM user_info u
JOIN online_sale o
ON u.user_id = o.user_id
WHERE u.joined LIKE '2021%'
GROUP BY date_format(o.sales_date, '%Y'), date_format(o.sales_date, '%m')

 

  • 풀이(정답)
SELECT date_format(o.sales_date, '%Y') YEAR, 
        date_format(o.sales_date, '%m') MONTH,
        count(distinct u.user_id) PURCHASED_USERS,
        round(count(distinct u.user_id)/(SELECT count(*) FROM user_info WHERE joined like '2021%'), 1) PUCHASED_RATIO
FROM user_info u
JOIN online_sale o
ON u.user_id = o.user_id
WHERE u.joined LIKE '2021%'
GROUP BY date_format(o.sales_date, '%Y'), date_format(o.sales_date, '%m')

user_id에서 중복제거를 해줬어야 함 :(

728x90
반응형

'데이터분석 > TIL' 카테고리의 다른 글

240807 TIL  (0) 2024.08.07
240731 TIL  (0) 2024.07.31
240730 TIL  (0) 2024.07.30