일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 캐리어보스턴백
- 내돈내산
- 수면위내시경
- 대장내시경
- 터키택시사기
- 튀르키예환전
- SQL
- 신당동한우
- 이스탄불택시사기
- 카보목배게
- 포켓몬고
- 튀르키예택시
- kmi
- 중구사랑상품권
- TNE목배게
- 터키택시
- 위내시경
- 수면대장내시경
- 이스탄불택시
- TDay
- 택시바가지
- 터키택시미터기
- 페이북
- Mode
- 건강검진
- 부모님모시고오기좋은음식점
- SKT
- 양재동맛집
- 네이버머니포인트카드
- 경량보스턴백
- Today
- Total
집순이 놀이터
[Partition By] 본문
메가콘2022를 듣고 주니어 데이터 분석가로서 공부해야 하는 것들을 하나하나 채우려 한다.
그 중 SQL 신이 되기 위한 이론공부를 시작해 보도록하자
집계 데이터를 하나의 컬럼데이터로 만들때 사용하는 Partition By 문
GROUO BY와의 차이점
일단 어떤 결과물을 내는 구문인지 눈으로 보기 위해 GROUP BY와 차이점 짚고 가자
# GROUP BY : 집계 기준, 집계 함수에 대한 컬럼만 존재
# 집계 데이터 name에 중복된 값이 없다.
SELECT name ,AVG(price)
FROM CART_PRODUCTS
GROUP BY name
# PARTITION BY : 각각의 raw데이터를 보존하면서, 집계에 대한 컬럼을 추가하는 방법
# 집계의 기준이 되는 name에 중복를 허용한다.
SELECT name , AVG(price) OVER (PARTITION BY name)
FROM CART_PRODUCTS
#표현식
분석함수([칼럼]) OVER(PARTITION BY 칼럼1, 칼럼2... [ORDER BY 절] [WINDOWING 절])
Parition by 구문은 '집계'함수 모두 사용할 수 있습니다.
구분 분석함수
집계 COUNT, MAX, MIN, SUM, AVG
순위 ROW_NUMBER, RANK, DENSE_RANK
순서 FIRST_VALUE, LAST_VALUE, LAG, LEAD
통계 STDDEV, VARIANCE
비율 RATIO_TO_REPORT, CUME_DIST, PERCENT_RANK, NTITLE
출처 : https://gent.tistory.com/442
[Oracle] 오라클 PARTITION BY 사용법 정리 (분석함수)
오라클에서 분석함수를 사용할 때 PARTITION BY를 사용하여 그룹으로 묶어서 연산을 할 수 있다. GROUP BY 절을 사용하지 않고, 조회된 각 행에 그룹으로 집계된 값을 표시할 때 OVER 절과 함께 PARTITION B
gent.tistory.com
https://programmers.co.kr/learn/courses/30/lessons/6228
예시 1 )
https://app.mode.com/benn/reports/c1039e799f77/runs/21a44c0d302d/embed
https://app.mode.com/benn/reports/c1039e799f77/runs/21a44c0d302d/embed
Report not found There was a problem finding this report.
app.mode.com
상황 : 세션을 구하기 위한 이벤트 시간 차이 구할 때
LAG : 이전 행의 값을 리턴
LEAD : 이후 행의 값을 리턴
LAG (expr [,offset] [,default]) OVER([partition_by_clause] order_by_clause)
LEAD(expr [,offset] [,default]) OVER([partition_by_clause] order_by_clause)
SELECT user_id,
event_type,
event_name,
occurred_at,
LAG(occurred_at,1) OVER (PARTITION BY user_id ORDER BY occurred_at) AS lag_event,
LEAD(occurred_at,1) OVER (PARTITION BY user_id ORDER BY occurred_at) AS lead_event,
occurred_at - LAG(occurred_at,1) OVER (PARTITION BY user_id ORDER BY occurred_at) AS last_event,
LEAD(occurred_at,1) OVER (PARTITION BY user_id ORDER BY occurred_at) - occurred_at AS next_event,
ROW_NUMBER() OVER () AS id
FROM tutorial.yammer_events e
WHERE e.event_type = 'engagement'
ORDER BY user_id,occurred_at
결과 화면
lag_event : 이전 이벤트 발생 시간
lead_event : 다음 이벤트 발생 시간
last_event : 이벤트 발생시간 - 이번 이벤트 발생 시간 => 전 이벤트와이 시간 차이
next_evnet : 다음 이벤트 발생 시간 - 이벤트 발생시간 => 다음 이벤트와의 시간 차이
'Study > SQL' 카테고리의 다른 글
[Analysis] Mode 2. Understanding Search Functionality (Feature 분석) (0) | 2022.07.14 |
---|---|
[Analysis] Mode 1. Investigating a Drop in User Engagement (0) | 2022.07.06 |
[SQL] With ( Common Table Expression)(작성중) (0) | 2022.06.17 |
[SQL zoo] Self Join 10 (0) | 2022.06.16 |
[프로그래머스] 입양 시각 구하기(2) (0) | 2022.06.16 |