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 |