일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- WITH ROLLUP
- 리프 중심 트리 분할
- splitlines
- DENSE_RANK()
- 마케팅 보다는 취준 강연 같다(?)
- Growth hacking
- WITH CUBE
- 분석 패널
- 그룹 연산
- XGBoost
- 그로스 해킹
- 컨브넷
- 데이터 증식
- 데이터 정합성
- 로그 변환
- 스태킹 앙상블
- 캐글 산탄데르 고객 만족 예측
- ARIMA
- pmdarima
- 데이터 핸들링
- 부트 스트래핑
- 인프런
- 캐글 신용카드 사기 검출
- tableau
- sql
- ImageDateGenerator
- lightgbm
- 그로스 마케팅
- 3기가 마지막이라니..!
- python
- Today
- Total
LITTLE BY LITTLE
[5] SQL로 분석하고 Tableau로 시각화하자 - 윈도우 함수,집합 연산자 본문
윈도우 함수
윈도우 함수는 행과 행간의 관계를 정의하며, 순위 및 집계함수(누적) 2가지 종류가 있다.
1. 윈도우 순위 함수 : 행과 행간의 순위 반환
2. 윈도우 집계 함수 : 행과 행간의 누적 집계 반환
순위함수 : ROW_NUMBER() 동일한 값의 고유한 순위 / RANK() 동일한 값의 고유한 순위(1위,2위..) / DENSE_RANK() 앞의 함수와 흡사하나, 동일한 순위를 하나의 등수로 간주함.
집계함수(누적) : COUNT() / SUM() / AVG() / MAX() / MIN()
윈도우 함수 기본 문법**
윈도우 함수 + OVER + (ORDER BY 열 ASC OR DECS)
윈도우 함수 + OVER + (PARTITION BY 열 ASC or DECS) *옵션으로 partition by 가 추가된 경우
1-1. 순위함수 예제
SELECT order_date
,ROW_NUMBER() OVER (ORDER BY order_date ASC) AS ROW_NUMBER
,RANK() OVER (ORDER BY order_date ASC) AS RANK
,DENSE_RANK() OVER (ORDER BY order_date ASC) AS DENSE_RANK
FROM [Order]
결과를 보면 윈도우 함수 종류에 따라 다르게 순위를 반환해준다.
- ROW_NUMBER은 고유한 순위 반환 (1,2,3,4..)
- RANK는 동일한 순위 반환 (1,1,1,4,4,4,7..)
- DENSE_RANK는 동일한 순위 반환, 대신 하나의 등수로 간주 (1,1,1,2,2,2..)
1-2. ORDER BY + PARTITION BY 순위함수 예제
SELECT mem_no
,order_date
,ROW_NUMBER() OVER (PARTITION BY mem_no ORDER BY order_date ASC) AS ROW_NUMBER
,RANK() OVER (PARTITION BY mem_no ORDER BY order_date ASC) AS RANK
,DENSE_RANK() OVER (PARTITION BY mem_no ORDER BY order_date ASC) AS DENSE_RANK
FROM [Order]
- 위의 예제에서 PARTITION BY만 추가되었다.
- 위의 예제와 같이 [order_date] 열 기준 오름차순으로 순위가 반환되지만, PARTITION BY로 인해 [mem_no] 열별로 구분되어 순위가 조회된다.
2-1. 집계함수(누적) 예제
SELECT order_date
,sales_amt
,COUNT(sales_amt) OVER (ORDER BY order_date ASC) AS 구매횟수
,SUM(sales_amt) OVER (ORDER BY order_date ASC) AS 구매금액
,AVG(sales_amt) OVER (ORDER BY order_date ASC) AS 평균구매금액
,MAX(sales_amt) OVER (ORDER BY order_date ASC) AS 가장높은구매금액
,MIN(sales_amt) OVER (ORDER BY order_date ASC) AS 가장낮은구매금액
FROM [Order]
- [order_date]열 기준 오름차순으로 누적 집계가 반환된다.
- 윈도우 함수 종류에 따라 동일 날짜(order_date)에 대한 [sales_amt] 누적 집계 방식이 다르다.
2-2. 집계함수(누적) 예제 & PARTITION BY
SELECT mem_no
,sales_amt
,COUNT(sales_amt) OVER (PARTITION BY mem_no ORDER BY order_date ASC) AS 누적_구매횟수
,SUM(sales_amt) OVER (PARTITION BY mem_no ORDER BY order_date ASC) AS 누적_구매금액
,AVG(sales_amt) OVER (PARTITION BY mem_no ORDER BY order_date ASC) AS 누적_평균구매금액
,MAX(sales_amt) OVER (PARTITION BY mem_no ORDER BY order_date ASC) AS 누적_가장높은구매금액
,MIN(sales_amt) OVER (PARTITION BY mem_no ORDER BY order_date ASC) AS 누적_가장낮은구매금액
FROM [Order]
집합 연산자 ( UNION, UNION ALL, INTER-SECT, EXCEPT )
집합 연산자는 두개 이상의 SELECT 절의 결과를 하나로 결합한다.
UNION 은 (합집합 + 중복된 행을 하나의 행으로 반환) , UNION ALL은 (합집합 + 중복된 행을 그대로 반환),
INTERSET는 교집합, EXCEPT는 차집합, 둘 다 중복된 행은 하나의 행으로 반환.
예제 파일
https://github.com/bjpublic/SQL-Tableau ( ch4 - 1.자주 쓰이는 sql 문법 - 1-5.집합연산자)
파일 가져오는 법 : Object Explorer 에서 DB 오른쪽 클릭 -> Tasks -> Import flat file
UNION / UNION ALL 예제
SELECT *
FROM [Member_1]
UNION
SELECT *
FROM [Member_2]
SELECT *
FROM [Member_1]
UNION ALL
SELECT *
FROM [Member_2]
INTERSECT
SELECT *
FROM [Member_1]
INTERSECT
SELECT *
FROM [Member_2]
EXCEPT
SELECT *
FROM [Member_1]
EXCEPT
SELECT *
FROM [Member_2]
'시각화 > SQL로 분석하고 Tableau로 시각화하자' 카테고리의 다른 글
[7] SQL로 분석하고 Tableau로 시각화하자 - 실무에 쓰이는 SQL 데이터분석 (0) | 2022.07.14 |
---|---|
[6] SQL로 분석하고 Tableau로 시각화하자 - VIEW,PROCEDURE,데이터 마트, 데이터 정합성 (0) | 2022.07.13 |
[4] SQL로 분석하고 Tableau로 시각화하자 - 그룹함수 (0) | 2022.07.12 |
[3] SQL로 분석하고 Tableau로 시각화하자 - 예제 (0) | 2022.07.12 |
[2] SQL로 분석하고 Tableau로 시각화하자 (0) | 2022.07.12 |