SQL - (데이터 분석 함수)

Nobu90·2023년 8월 11일
1

SQL

목록 보기
7/8

순위

순위 출력 함수 - rank() over(order by 열 차순) 별명
(공동 1등, 3등, 4등..)

예시)
select ename, deptno, sal, rank() over (order by sal desc) 순위
from emp
where deptno = 20

순위 출력 함수 - dense_rank() over(order by 열 차순) 별명
(공동 1등, 2등, 3등..)

예시)
select ename, deptno, sal, dense_rank() over (order by sal desc) 순위
from emp
where deptno = 20

순위 출력 함수 - rank or dense_rank() over(partition by 열, order by 열 차순)
(A부서 1등, A부서 2등, B부서 1등, B부서 2등..)

예시)
select job, ename, sal, dense_rank() over(partition by job order by sal desc) 순위
from emp

특정 값의 순위 구하기 - dense_rank(값) within group(order by 열 차순) 별명

예시)
select dense_rank(2975) within group(order by sal desc) 순위
from emp

등급

등급 출력하기 - ntile(등급 수) over(order by 열 차순) 별명

예시)
select ename, job, sal, ntile(4) over(order by sal desc) 등급
from emp
where job in ('ANALYST', 'MANAGER')

비율

순위별 비율 출력하기 - cume_dist() over(order by sal desc) 비율
from emp

예시)
select ename, sal, dense_rank() over(order by sal desc) 순위,
round(cume_dist() over(order by sal desc), 2) 비율
from emp

순위별 비율 출력하기 - cume_dist() over(order by sal desc) 비율
from emp

(부서 별로)

예시)
select deptno, ename, sal,
round(cume_dist() over(partition by deptno order by sal desc), 2) 비율
from emp

리스트

특정 열 기준으로 리스트 출력 - 구분 열, listegg(리스트할 열, 구분자) within group (정렬 조건) as 별명

예시)
select deptno, listagg(ename, ',') within group (order by ename asc) as 이름
from emp
group by deptno

이전 행, 다음 행

이전 행 출력하기 - lag(열, 위치) over(정렬 조건) 별명

예시)
select ename, sal, lag(sal, 1) over(order by sal asc) 이전행
from emp

다음 행 출력하기 - lead(열, 위치) over(정렬 조건) 별명

예시)
select ename, sal, lead(sal, 1) over(order by sal asc) 다음행
from emp

1개의 댓글

comment-user-thumbnail
2023년 8월 11일

큰 도움이 되었습니다, 감사합니다.

답글 달기