TIL

2024-06-27

여연찌 2024. 6. 27. 22:00
  • Today

1. SQL 코드카타 

2. Tableau 3주차 수강, 4주차 4-1 수강

 


  • Today I Learned

 

SQL

 

평균 판매 가격을 구하기

  • Write a solution to find the average selling price for each product. average_price should be rounded to 2 decimal places.
SELECT p.product_id
     , CASE WHEN start_date <= u.purchase_date <= end_date THEN units*price/ SUM(units) END average_price
FROM prices p LEFT JOIN unitssold u ON p.product_id=u.product_id
GROUP BY p.product_id

 

 

 

원하는 형식처럼 나오기는 했지만, 

여기서 원하는 값이 나오지 않았다.. 

CASE WHEN 을 사용하는 것은 맞는 것 같은데 조건이 잘 못 들어 간듯하다.

 

 

 

 

 

join 후 테이블의 상태를 확인해보니 group by 를 하기 전에는 

위와 같은 상태였고, group by 를 한 후에는

이렇게 된다.

product_id 별로 그룹화를 해주어야 하기 때문에 group by 를 꼭 해주어야 하는 상황이니

purchase_date 가 start 와 end 사이에 들어가도록 join 조건을 바꾸어주어야 할듯하다

SELECT p.product_id
     , IFNULL(ROUND(SUM(units*price)/ SUM(units),2),0) AS average_price
FROM prices p 
LEFT JOIN unitssold u 
ON p.product_id=u.product_id
AND u.purchase_date BETWEEN start_date AND end_date
GROUP BY p.product_id

 

계속 잘못 더해졌기 때문에 찾아봤더니 join 조건에 있는 purchase_date 의 조건 문제였다.

start <= purchase_date <= end 

로 하면 다른 값이 나옴... 위의 조건과 between 을 넣었을때의 데이터 값은 왜 다를까 ?

 

수학적으로 보았을 때에는 같은 뜻이고, 리트코드에서는 돌아가긴 했지만

플랫폼에 따라 syntax 오류가 나올 수 있다. 그러므로,

 

조건을 걸어줄 때는 아래와 같이 변수 하나씩 넣어주는 것이 좋다.

-- AND purchase_date >= start_date
-- AND purchase_date <= end_date

또는, BETWEEN ... AND 와 같이 하나의 함수조건으로 사용해주어야 한다.

-- AND purchase_date BETWEEN start_date AND end_date

 


Tableau

 

 

 

시계열 데이터(시간에 따른 추이) 

line 그래프를 통해 변화량과 트렌드를 한눈에 보기에 용이

연속적인 데이터에 사용하기 적합

 

범주형 데이터

범주 간의 차이나 분포를 시각적으로 이해하기 쉬움

bar plot

 

Map Chart

지도를 활용해서 지리적 위치를 살펴볼 수 있음

지역별 데이터의 분포 및 비중을 한눈에 파악 가능

 

Pie Chart

 

범주가 적을 때 간단히 활용

각 부분이 전체에서 차지하는 비중을 수비게 이해 가능

데이터의 구성 비율과 분포를 한눈에 파악

 

Treemap Chart

 

데이터를 계층적으로 표현하는데 사용

카테고리별로 특정 데이터 집합이 전체 데이터에서 차지하는 비율을 면적으로표현하여 카테고리별 구성 요소를 한눈에 파악

1등 host 인 kara 의 평균 숙소 가격은 236달러로 2,3등에 비해 낮지만

가장 많이 예약된 호스트이다.

 

 


 

SQL Challenge 

 

 

클래식 리텐션

: 매일 마다 사용하는, 서비스사용하는 주기가 짧을 때 사용

: day N 에 다시 행동한 사람 / day0에 행동한 사람

 

bracket 리텐션(범위)

: 기간을 기준으로 설정하여 기간 내에 한번이라도 다시 행동을 하면 리텐션 된 것으로 간주

: 여러번 행동을 해도 고유 유저당 1회로 간주

: 기준기간에 다시 행동한 사람 / day0 에 행동한 사람

 

rolling 리텐션

: 이탈한 유저를 제외하고 언제든지 돌아온 사람

: 한 번이라도 다시 돌아오는 경우

: (day0 에 행동한 사람 - day N 이후 이탈한 사람) / day0 에 행동한 사람

 

 

> 보통 rolling 리텐션 보다는 클래식이나 bracket 리텐션을 주로 사용한다!

 

 

 

코호트(Cohort) 분석

공통적인 특성을 가진 사람들의 집단

:동질 집단이 시간에 따라 어떻게 변화하는지 분석하는 것

 

 

 

'TIL' 카테고리의 다른 글

2024-07-01  (0) 2024.07.01
2024-06-28  (0) 2024.06.28
2024-06-26  (0) 2024.06.26
2024-06-18  (0) 2024.06.18
2024-06-17  (0) 2024.06.17