TIL 6일차 : 실습

2023. 12. 7. 23:25회고/TIL(매일)

 

도전한 점

  • SQL 3주차 실습 과제 시작
  • 데이터분석 아티클 스터디 2일차, 어려운 용어 정리

 

  • 실습 1. 서울 지역의 음식 타입별 평균 음식 주문금액 구하기 (출력 : '서울', '타입', '평균 금액')

 

작성 코드(선작성) 코드 예제(후확인)
select addr,
cuisine_type,
avg(price)
from food_orders
where addr like ('%서울%')
group by cuisine_type
select substr(addr, 1, 2) "지역",
cuisine_type,
avg(price) "평균 금액"
from food_orders
where addr like ('서울%')
group by 1, 2

 

Q. group by 2 와 group by 1, 2 결과가 같은데 왜 둘 다 쓰는지? 1은 같은 값이라 범주별로 묶을 게 없음.

A. where addr like '%서울%' 로 인해서 결과는 문제 없이 같은게 맞다.

 

*substr 을 이용하여 '서울' 단어만 빼낸다. 필요한 값만 출력한다.

*별칭 예제에 맞춰서 깔끔하게 주기. 지역/타입/평균 금액 이렇게 쓰면 좋겠다.

 

  • 실습 2. 이메일 도메인별 고객 수와 평균 연령 구하기

 

작성 코드(선작성) 코드 예제(후확인)
select substr(email, 9, 12) "도메인",
count(customer_id) "고객 수",
avg(age) "평균 연령"
from customers
group by email like '%.com%', '%.net%'

- 범주화에 like를 사용해서 추출했음.
- 깔끔하게 substr 으로 주소만 추출했음.
- naver, mail 추출이 안됌.
[1]] select substr(email, 10) "도메인",
count(1) "고객 수",
avg(age) "평균 연령"
from customers
group by 1

[2] select substr(email, 10) "도메인",
count(customer_id) "고객 수",
avg(age) "평균 연령"
from customers
group by 1

 

Q. 실제로는 이메일 주소의 숫자가 다 다른데 이때 도메인만 추출하려면 어떻게 해야하는지?

A. 강의 완강 후에도 모르면 찾아보기.

 

*컬럼의 모든 수를 구해야할 땐, 간단하게 count(1)을 작성한다.

 

  • 실습 3. '[지역(시도)] 음식점이름 (음식종류)' 컬럼을 만들고, 총 주문건수 구하기

 

작성 코드 코드 예제
select concat('[', substr(addr, 1, 6), '] ', restaurant_name, ' (', cuisine_type, ')') "지역별 식당과 종류",
count(1) "총 주문건수"
from food_orders
select concat('[', substr(addr, 1, 2), '] ', restaurant_name, ' (', cuisine_type, ')') "음식점",
count(1) "주문 건수"
from food_orders
group by 1

 

Q. 문제가 있다. 출력값이 1이다. 이유가 뭐지?

A. 범주화 강의 다시 듣는 중. (2-4)

 

*타입 별로 연산값을 구할 때, where로 여러번 쿼리 돌리는 건 비효율적이니까 group by 를 사용한다.

*group by 1 : select 1번 값의 타입 별로 연산 값을 구해줘. 라는 의미이다.

*실제로 해보니 범주화를 시키지 않으면 모든 쿼리문의 1번 값만 추출된다. 안해봐서 몰랐음.

*위에서 묶고 싶은 범주형 컬럼을 모두 (이어서) 적어준다고 이해하면 쉽다. pay_type 별로 값을 구하고 싶다면 그대로 적는 것처럼.

 


좋았던 점

  • 데이터분석 아티클 스터디 2일차


아쉬운 점

  • 아티클 블로그 글 재정리


잊지말 점

  • group by + 묶고 싶은 범주의 위치를 숫자로 작성한다.
  • count(1)
  • 출력값이 1개만 뜬다면 미범주화가 범인이다.


시도할 점

  • 나도 빨리 파이썬 파트를 병행하고 싶다.

'회고 > TIL(매일)' 카테고리의 다른 글

TIL 8일차 : 복습, subquery, join  (0) 2023.12.11
TIL 7일차 : if, case when, cast  (1) 2023.12.08
TIL 5일차 : replace, substr, concat  (1) 2023.12.06
TIL 4일차 : 실습  (0) 2023.12.05
TIL 3일차  (0) 2023.12.04