데이터 분석 트랙 6일차(25.02.24.) TIL
[목차]
1. 3회차 라이브 강의 및 개인공부 정리
2. 2주차 팀 발제 개인 인사이트 정리
1. 3회차 라이브 강의 및 개인공부 정리
1.1. 라이브 강의 및 개인공부 인사이트 정리
A. 필터링 조건문
- where 절에서 조건을 여러개 묶어야 할 경우 조건마다 소괄호를 꼭 써야 한다. [미사용시 컴퓨터는 연산자가 어디까지 적용되는지 알 수 없어 오류가 발생한다.]
ex. where (컬럼1 = !값1) and ((컬럼2 = 값2) or (컬럼3 = 값3))
- SQL 집계함수 정의) "전체", "특정 컬럼"을 대상으로 select문에서 사용되며 5종류가 있다.
- SQL의 그룹화 "GROUP BY", "HAVING" [특정 기준을 가지고 집계함수를 사용하자.]
- SELECT절에서 그룹핑 하고자 하는 데이터와 기준 컬럼을 적은 후 > GROUP BY를 사용할 시 기준이 되는 컬럼은 모두 적어준다! [∵집계함수는 1개의 값을 반환하지만, 기준 컬럼은 수없이 많은 값을 반환한다. 따라서 기준컬럼 당 값 1개를 반환하기 위해 꼭 명시해야 한다.]
- GROUP BY절에서 기준컬럼의 조건= 'XX별'과 같은 단어를 의미한다.
- HAVING절은 WHERE를 통해 전체를 필터링 하고 GROUP BY를 통해 그룹핑을 한 뒤에 그 다음에 적용할 조건을 지정하는 절이다. 필수적인 절은 아니지만, 반드시 순서는 기억해야 한다.[WHERE > GROUP BY > HAVING]
B. SQL SUB QUERY 구문
- 서브쿼리문은 마지막에 세미콜론( ; )을 사용할 수 없다.
- 서브쿼리문 안에서 order by절을 사용할 수 없다.
- 서브쿼리는 SELECT(중첩 서브쿼리), WHERE(스칼라 서브쿼리), FROM(인라인 뷰 서브쿼리)절에서 사용 가능하며 가장 일반적인 형태가 FROM 절에 사용되는 형태이다.
- 종류
B.a. 중첩(일반) 서브쿼리
- where 절에서 사용되는 서브쿼리로, 서브쿼리의 결과에 따라 조건절이 달라진다.
ex. "BASIC.THEGLORT 테이블에서 나이가 ('문동은'의 '나이')보다 큰 경우의 모든 데이터를 가져온다."
[SELECT *
FROM 테이블1
WHERE 컬럼1 > (SELECT 컬럼1 FROM 테이블1 WHERE 컬럼2 = '값‘)]
B.b. 스칼라 서브쿼리
- SELECT 절에서 사용되며 하나의 컬럼처럼 사용된다. 스칼라 서브쿼리를 사용하기 위해선 서로다른 테이블이 필요하다.
ex.[SELECT 컬럼1, 컬럼2,
(select count(*) from 테이블B where 테이블B.컬럼1=테이블A.컬럼1) as same_name_cnt,
(select sum(컬럼B) from 테이블B where 테이블B. 컬럼1=테이블A.컬럼1) as same_name_sumamount
from basic.theglory;]
cf) join의 형태로 묶어서 사용하는 것을 from 문[테이블 단위]이 아닌 select문에서 서브쿼리 where[컬럼 단위]를 통해 줄 수 있다!
B.c. 인라인 뷰(가장 많이 사용)
- FROM 절에서 하나의 테이블처럼 사용된다. 반드시 테이블 명칭을 부여해야 한다.
- 차후 JOIN, UNION과 많이 사용된다.
C. 개인 진도 인사이트
- case 구문에서 when절에서 조건을 2개 엮으려면 반드시 and 뒤에 컬럼과 함수를 정확히 적어야 한다.
ex.
[case when price <=5000 then 'price_group1'
when price >5000 and price <=10000 then 'price_group2'
when price >10000 and price <=30000 then 'price_group3'
when price <30000 then 'price_group4'
end price_group]
- order by 절에는 값, 수식이 들어간다.
- avg, sum 등등의 수식 내에 if와 같은 조건문을 적어 값을 가공할 수 있다.
- concat 문에는 컬럼의 데이터, 한글, 영어, 숫자, 기타 특수문자를 넣을 수 있다! 기본적으로 concat 안에는 문자 데이터들을 붙이는 것이다 보니 꼭, 문자데이터에 작은따옴표로 표시를 해 줘야 한다.
- 'substr' 문에서 시작 숫자를 지정한 뒤 끝 숫자를 생략하거나, 아주 큰 숫자를 지정해 그 사이의 글자를 다 가져올 수 있다.
- case문에서 ‘else’를 사용하는 이유는 조건에 부합하지 않는 경우를 지정하기 위함이다. 따라서 조건에 부합하지 않는 경우가 없을 경우 생략이 가능하다.
- MySQL에서 data type 오류 해결하기 위해선 함수를 쓸 수 있다.
형태 : cast(변경 컬럼 혹은 값) as (decimal[숫자형], char[문자형])
2. 2주차 팀 발제 개인 인사이트 정리
- 2주차 팀 단위 발제는 주제 선정 및 SQL 활용 EDA이다.
- EDA : 수집한 데이터가 들어왔을 때, 이를 다각도로 관찰하고 이해하는 과정[탐색적 데이터 분석]
- 선정 주제 : [이커머스] 이커머스 이벤트 히스토리
- 세부 주제
a. 신규 및 기존 유저(영구 사용자 ID) 구분 및 행동패턴 확인.
b. 가장 많이 팔리는 제품이 무엇인가?
c. 제품별 브랜드 충성도 확인. 가격이 우선인가 브랜드가 우선인가?
d. 가장 많이 팔린 제품과 같이 팔린 제품은 무엇인가?
e. 마케팅을 한다면[목표는 자유ex. 기존고객 유지, 제품 판매량 증가] 무엇을 기획해야 해야할까? [개인 목표]
※ 세부 주제는 다음과 같이 정했고 02.26.까지 데이터 분석 수행 및 해석을 해볼 것임.