[Data analyst] Today I Learn/본 캠프 TIL (24.09.30~)

[TIL Day 11] WINDOW FUNTION과 자주 쓰는 함수들

pjw250 2024. 10. 16. 16:30

[SELECT 절에서 사용되는 윈도우 함수 기본 문법]

SELECT WINDOW_FUNTION () OVER (PARTITION BY CAL1 ORDER BY CAL2 ASC/DESC)
FROM TABLE

 

[특징]

- GROUP BY와 병행하여 사용할 수 없지만 서브쿼리에는 사용할 수 있다.

 

종류 특징 함수
순위 *** 같으면 같은 등수 부여 후 건너뛰고 순차적 번호 부여
1,1,3,4,4,6,7, ...
(ORDER BY 필수)
RANK()
순위 같으면 같은 등수 부여 후 순차적 번호 부여
1,1,2,2,3,3, ...
(ORDER BY 필수)
DENSE_RANK()
순위 *** 같아도 정렬 기준에 따라 연속된 번호 부여
1,2,3,4,5,6,7,8, ...
(ORDER BY 필수)
ROW_NUMBER()
집계 집계함수와 동일 SUM, MAX, MIN, AVG, COUNT
순서 PARTITION 한 것에서 ORDER BY를 했을 때
제일 먼저 뜨는 값을 호출
FIRST_VALUE(칼럼명)
순서 PARTITION 한 것에서 ORDER BY를 했을 때
제일 마지막 뜨는 값을 호출
LAST_VALUE(칼럼명)
순서 *** 지정 칼럼에서 이전 n 번째의 행 값 호출
(ORDER BY 필수)
LAG(칼럼, n) / n 기본 값 (1), 최대 (3)
순서 *** 지정 칼럼에서 다음 n 번째의 행 값 호출
(ORDER BY 필수)
LEAD(칼럼, n) / n 기본 값 (1), 최대 (3)
비율 (ORACLE 에서만) (ORDER BY 불가)
행의 값을 전체 합한 것에서의 해당 값의 비율 표현
RATIO_TO_REPORT(칼럼)
비율 *** 최소 값을 0 ~ 최대 값을 1로 두고 백분위 수 출력
(0.25, 0.98 등, 소숫 점)
(ORDER BY 필수)
PERCENT_RANK() OVER(ORDER BY())
비율 파티션/ORDER BY 별로 값들을 누적 백분율
행이 3개면 1/3으로 각각 표현
(ORDER BY 필수)
CUME_DIST() OVER(ORDER BY())
비율 파티션/ORDER BY 별 전체 건수를 계산한 값으로 n 등분한 결과
(ORDER BY 필수)
NTILE(n) OVER(ORDER BY())

 

 

[CAST () 의 TYPE들]

 

[String 함수]

# X와 Y, Z를 순차적으로 합친다. (단, STRING 이어야 함)
CONCAT(X, Y, Z, ...)

# 중간에 '/' 혹은 ',' 를 넣어서 두 문자열 사이에 병합 문자열을 지정할 수 있음
CONCAT(X, '/', Y)

# 문자열 혹은 X 대상에서 n 번째 부터 m 개의 STR 을 자를 때
SUBSTR(X, n, m)

# 해당 문자열 혹은 X 대상에서 구분 기호('/')를 기준으로 n 번째 값을 호출
SUBSTR_INDEX(X, '/', n)

# X 대상의 문자열을 뒤집는다.
REVERSE(X)

# X 대상에서 n개의 STR를 추출 (좌측, 우측)
LEFT(X,n) / RIGHT(X,n)

 

[Math 함수]

# 절대 값
ABS(n)

# 반올림
ROUND(X,n)

# 소숫 점 올림/내림
CEILING(X) / FLOOR(X)

# n 번째 자릿 수에서 버림
TRUNCAT(X,n)

# 0 ~ 1 사이 실수 중 랜덤 출력
RAND()

# 0 ~ 100 사이 정수 중 랜덤 출력
ROUND(RAND()*100, 0)

 

[DATE 함수들]

# 연도, 월, 일 출력 (단, X의 TYPE이 DATE 일 것)
YEAR(X) / MONTH(X) / DAY(X)

# 현재 DATE 출력 (연-월-일 시:분:초)
NOW()
SYSDATE()
CURRENT_TIMESTAMP()

# X 로부터 (n = YEAR, MONTH, DAY, HOUR, MINUTE, SECOND) 합과 차
DATE_ADD(X, INTERVAL n)
DATE_SUB(X, INTERVAL n)

# X와 Y 간의 날짜 차이
DATEDIFF(X, Y)  # X가 Y보다 커야됨

# START X 에서 END Y 까지의 n 값 출력 (n = YEAR, MONTH, DAY, HOUR, MINUTE, SECOND)
TIMESTAMPDIFF(n, X, Y)

# 현재 시간을 UNIXTIME으로 출력
UNIX_TIMESTAMP()

# DATE FORMAT 함수 ('' 안에는 여러 옵션들이 있음 밑에 그림 참고)
DATE_FORMAT(X, '%Y-%m-&d')

 

[DATE_FORMAT(칼럼, '값')] 에서 '값'에 쓰이는 요소들