데이터 분석

[day24] 중꺾그마...?

경 민 2025. 3. 11. 20:44
더보기

👩🏻‍💻  TODAY I LEARN

📌 SQL

- 코드카타 제한시간 두고 풀기

- window 비율 함수 정리

📌 Python 

- 종합반 강의 4주차

- 코드카타

1. SQL 

1-1. 코드카타 제한시간 두고 풀기

1) 코드카타 97번

select
    round(sum(a.immediate) / count(1) * 100,2) as immediate_percentage
from
(select
    customer_id,
    case when min(order_date) = customer_pref_delivery_date then 1 else 0
    end as immediate
from delivery 
group by customer_id) a

"'최초 구매일 = 배송 희망일'이면 1, 아니면 0 값을 내는 칼럼을 만들고,

이거 이용해서 true인 그룹 백분율 구해줘"

 

2) 코드카타 100번

select
    activity_date as day,
    count(distinct user_id) as active_users
from activity
where activity_date between date_sub('2019-07-27', interval 29 day) and '2019-07-27'
group by activity_date

⭐️ 기간이 30일이면 interval 29 day !!

처음에 30 으로 했다가 다른 분들 쿼리 보고 발견했다 . ㅎ ㅜ ㅎ 

 

 

1-2. window 함수 정리

 

[day] window 함수 - 비율 함수

1. RATIO_TO_REPORT2. RANK_PERCENTAGE3. CUME_DIST✔︎ 모든 비율함수 값은 0~1 사이의 값이다.✔︎ RATIO_TO_REPORT는 mysql에서 사용불가1. RATIO_TO_REPORT🔶 의미전체 sum 값에 대한 비율 🔶 특징Mysql 에서 사용 불가

rosenps3.tistory.com

SQLD 공부하면서 학습은 했지만 실습해본 적이 없어서 정리할 겸 직접 돌려봤다.

100% 이해했다고는 못 하지만 어느 정도 감은 잡혔음 !

 

2. Python

2-1. 종합반 4주차

1) 리스트 합계 구하는 방법

방법1. sum 함수 사용

data = [2, 4, 6, 8, 10]

result = sum(data)
print(result)

 

방법2. 반복문 

def sum(numbers):
  total = 0
  for i in numbers:
    total += i
  return total

data = [2, 4, 6, 8, 10]
result = sum(data)
print(result)

 

방법3. 함수 정의 with 가변인수 args

def sum(*args):
  total = 0
  for i in args:
    total += i
  return total

result = sum(2,4,6,8,10)
print(result)

✅ data 라는 고정된 리스트를 정의하지 않고, 더 많은 인수들을 받기 위해 가변인수를 의미하는 args를 사용한다.

 리스트가 이미 정의되었을 때는 사용 불가

 

2) 리스트 평균 구하기

def avg(numbers):
  total = 0
  for i in numbers:
    total = (total + i) / len(total)
  return total

data = [2, 4, 6, 8, 10]
print(avg(data))

❓ sum 함수를 구하고 마지막에 따로 len(data) 처리하지 않고

그냥 한 번에 평균을 구하는 함수를 만들 순 없을까? 

싶어서 만들어 봤는데 결과는 ❌

⭐️ total 변수가 처음에 0 으로 정의되어있는 단순 숫자값이기 때문에 len함수를 사용할 수 없다!

⭐️ 그리고 애초에 틀린 게, 저 쿼리로는 전체 합계를 제대로 구할 수 없다. 

 

궁금증 해결했으니 제대로 된 방법 정리해보자.

위에 합계 구한 3가지 방법대로 풀어봤다.

 

방법1. sum 함수 사용

data = [2, 4, 6, 8, 10]

average = sum(data)/len(data)
print(average)

 

방법2. 반복문

def avg(numbers):
  total = 0 
  for i in numbers:
    total += i
  return total / len(numbers)

data = [2, 4, 6, 8, 10]
result = avg(data)
print(result)

 

방법3. 함수 정의 with 가변인수 args

def avg(*args):
  total = 0
  for i in args:
    total += i
  return total / len([2,4,6,8,10])

result = avg(2,4,6,8,10)
print(result)

⭐️ 가변인수 사용할 때 len함수를 독립적으로 걸어줄 수 있다.

반환값에 len을 넣으면 되겠다는 걸 알게 되었고, 가변인수의 평균 구하기에서 응용을 해보았다.

가변 인수는 말그대로 정해지지 않은 인수이기 때문에 독립적이다.

때문에 len의 리스트도 자유롭게 사용할 수 있다.

‼️ len([2,4,6,8,10]) 대신에 len(*args) 사용할 수 없음.