TIL

2024-04-16

여연찌 2024. 4. 16. 20:42
  • Today

1. 미니프로젝트

> 추출해낸 결과물을 가지고 어떤 분석을 해볼 수 있는지, 어떤 특이점이 있는지 예상해보기

2. SQL, 파이썬 코드카타


  • Today I Learned

SQL

 

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

https://lyj-01.tistory.com/95

 

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

CAR_RENTAL_COMPANY_CAR 테이블과 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블과 CAR_RENTAL_COMPANY_DISCOUNT_PLAN 테이블에서 자동차 종류가 '세단' 또는 'SUV' 인 자동차 중 2022년 11월 1일부터 2022년 11월 30일까지 대여 가능

lyj-01.tistory.com

SELECT c.car_id
     , c.car_type
     , ROUND(c.daily_fee * 30 * (100-p.discount_rate)/100) FEE
FROM CAR_RENTAL_COMPANY_CAR c JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN p 
     ON c.car_type=p.car_type AND p.duration_type = '30일 이상'
WHERE c.car_type IN ('세단', 'SUV') AND c.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')
GROUP BY 1         -- GROUP BY 는 제외 가능
HAVING FEE >= 500000 AND FEE < 2000000
ORDER BY 3 DESC, 1, 2 DESC

GROUP BY  없이 HAVING 단독으로 올 수 있다.

테이블 전체가 한 개의 그룹이 되는 경우 사용 가능하다.

having 조건을 where 절에 넣어줄 경우 오류 발생

 


파이썬

 

약수의 개수와 덧셈

우선 left 의 약수를 구해보았다.

def solution(left, right):
    answer = []
    for i in range(1,left+1):
        if left%i == 0:
            answer.append(i)
    return answer

left 의 갯수는 구해졌는데.. 

right 까지가 필요한거니까 while 를 사용해야할까? 싶었고

left 부터 right 까지 이기 때문에 range 안에 (left,right+1) 까지는 입력하였으나 이 뒤는 막혀서 구글링!

 

def solution(left, right):
    answer = 0
    for i in range(left,right+1):
        count = 0
        for n in range(1,i+1):
            if i%n == 0:
                count += 1
        if count %2 == 0:
            answer += i
        else:
            answer -= i 
    return answer

for 반복절 안에 for 을 또 사용 할 수 있었다 .. 

그리고 count 라는 매개변수를 준 것 처럼 for 구문 안에서의 매개변수도 줄 수 있다

 

 


프로젝트

 

 

다운 받았던 원본파일이 오입력 등의 이유로 이상치들이 있어 데이터 전처리 과정을 진행해주었다.

오입력 된 행 데이터 찾기

SELECT *
FROM US2020
WHERE LENGTH(Product_Name) > 100;

 

우선 다운 받은 데이터를 파악하기 위해

분기별로 총 매출액과 판매량,수익, 수익률을 계산해주었다.

SELECT CASE WHEN MONTH(Order_Date) BETWEEN 1 AND 3 THEN '1분기'
            WHEN MONTH(Order_Date) BETWEEN 4 AND 6 THEN '2분기'
            WHEN MONTH(Order_Date) BETWEEN 7 AND 9 THEN '3분기'
            WHEN MONTH(Order_Date) BETWEEN 10 AND 12 THEN '4분기'
        END '분기'
     , ROUND(SUM(sales),2) Total_sales -- 총 매출액
     , SUM(Quantity) Total_quantity  -- 총 판매량
     , ROUND(SUM(profit),2) Total_profit  -- 총 수익
     , ROUND(SUM(profit)/SUM(sales)*100,2) profit_rate -- 수익률
FROM us2020
GROUP BY 1

 

매출액이 높은데에 비해 순이익이 적은 분기가 있다.

그 분기에 판매되었던 상품 및 할인율에 따라 변화가 있을 수 있다.

 

월 별 분석

select case when Order_Date like '2020-01%' then '1월'
            when Order_Date like '2020-02%' then '2월'
            when Order_Date like '2020-03%' then '3월'
            when Order_Date like '2020-04%' then '4월'
            when Order_Date like '2020-05%' then '5월'
            when Order_Date like '2020-06%' then '6월'
            when Order_Date like '2020-07%' then '7월'
            when Order_Date like '2020-08%' then '8월'
            when Order_Date like '2020-09%' then '9월'
            when Order_Date like '2020-10%' then '10월'
            when Order_Date like '2020-11%' then '11월'
            ELSE  '12월' end "월별",
       round(sum(Sales),2) Total_Sales,
       sum(Quantity) Total_Quantity,
       round(sum(Profit),2) Total_Profit,
       round(sum(Profit)/sum(Sales)*100,2) Profit_rate
from US2020
group by 1

 

category 별 분석

select Category,
       round(sum(Sales),2) Total_Sales,
       sum(Quantity) Total_Quantity,
       round(sum(Profit),2) Total_Profit,
       round(sum(Profit)/sum(Sales)*100,2) Profit_rate
from US2020
group by 1
order by 5 DESC

# 수익률이 높은 상품 중 수익이 가장 높은 상품인 'Technology' 의 판매자 관점에서

가장 이윤이 높은 판매 방식을 찾아보기로 했다

 

 

1. 어떤 상품을 우선으로 판매하는 것이 좋을지?

> 서브카테고리별로 비교

> 1순위 'Accessories'

select subCategory,
       round(sum(Sales),2) Total_Sales,
       sum(Quantity) Total_Quantity,
       round(sum(Profit),2) Total_Profit,
       round(sum(Profit)/sum(Sales)*100,2) Profit_rate
from US2020
WHERE Category = 'Technology'
group by 1
order by 5 DESC

 

2. 해당 서브카테고리를 선택한 이유?

> 판매량, 수익, 수익률, 매출액, 판매수량

 

 

2-1 꾸준한 판매량

SELECT case when month(Order_Date)=1 then 1
            when month(Order_Date)=2 then 2
            when month(Order_Date)=3 then 3
            when month(Order_Date)=4 then 4
            when month(Order_Date)=5 then 5
            when month(Order_Date)=6 then 6
            when month(Order_Date)=7 then 7
            when month(Order_Date)=8 then 8
            when month(Order_Date)=9 then 9
            when month(Order_Date)=10 then 10
            when month(Order_Date)=11 then 11
            else 12 end "월별",
       subCategory,
       round(sum(Sales),2) tot_sales,
       sum(Quantity) tot_quantity,
       round(sum(Profit),2) tot_profit,
       round(sum(Profit)/sum(Sales)*100,2) profit_rate
FROM us2020
WHERE Category = 'Technology'
GROUP BY 1, 2
ORDER BY 1, 4 desc;

#  'Accessories' 상품의 경우 매달 꾸준히 판매되고 있다.

 

2-2~4 높은 수익률, 수익, 매출액, 판매수량

select subCategory,
       round(sum(Sales),2) Total_Sales,
       sum(Quantity) Total_Quantity,
       round(sum(Profit),2) Total_Profit,
       round(sum(Profit)/sum(Sales)*100,2) Profit_rate
from US2020
WHERE Category = 'Technology'
group by 1
order by 5 DESC,4 DESC, 2 DESC, 3 DESC

# 전체 카테고리에서 2위 이지만 1위엔 'Copiers' 의 경우 판매가 되지 않았던 달이 있고 

분석에 필요한 Quantity 값이 부족하기 때문에 'Accessories' 로 선택하였다.

 

 

3. 정가를 파악하고 가격대별로 Segmentation 을 하였을 때 가장 많이 팔리는 가격대 알아보기
4. 해당 제품의 월 별 매출/할인/판매량/수익/수익률 확인

5. 이윤을 남기기 위해 어떤 방법을 사용할 것인지 결정

6. 1년 동안의 매출/판매량/수익/수익률 예측

7. 해당 카테고리에 대한 분석결과를 토대로 우리 기업이 가장 많은 이윤을 추구할 수 있는 계획 수립

 

 

 

 

 

 

 

* 새롭게 알게 된 꿀팁!

ID 나 code 등의 경우 varchar 또는 string 형식으로 만든다!

 


  • Next

1. 프로젝트 준비

2. SQL, 파이썬 코드카타

 

'TIL' 카테고리의 다른 글

2024-04-18  (1) 2024.04.18
2024-04-17  (0) 2024.04.17
2024-04-15  (0) 2024.04.15
2024-04-12  (0) 2024.04.12
2024-04-11  (0) 2024.04.11