본문 바로가기

SQL

[Oracle] 분석함수

분석함수

select employee_id, department_id, salary, min(salary) over()
from employees;

누적합

select employee_id, department_id, salary, sum(salary) over(order by employee_id) "누적합"
from employees;

OO별

select employee_id, department_id, salary, sum(salary) over(partition by department_id) "부서별 총합"
from employees order by 2;

OO별 누적합

select employee_id, department_id, salary, sum(salary) over(partition by department_id 
                                                            order by employee_id) "부서별 누적합"
from employees order by 2;

 

TOP-N 분석

rank() : 동일한 순위가 있을 경우에 다음 순위는 갭이 생길 수 있다. 1-2-2-4-5 ...

dense_rank() : 동일한 순위가 있더라도 연이은 순위를 구하는 함수. 1-2-2-3-4 ...

select rank() over(order by salary desc) "rank",
	dense_rank() over(order by salary desc) "dense_rank", employee_id, salary
from employees;

부서별 급여 순위

select rank() over(partition by department_id order by salary desc) "부서별 rank", 
	dense_rank() over(partition by department_id order by salary desc) "부서별 dense_rank", 
	department_id, employee_id, salary 
from employees;

주의!!

rownum : fetch번호를 리턴하는 가상컬럼(numbering)

select rownum, employee_id, salary
from employees
where rownum <= 10 --where절 1순위 : 랜덤으로 10개 뽑아서
order by salary desc; --랜덤으로 10개 뽑아낸 결과를 가지고 정렬

우리회사에 똑같은 급여자가 없을때만 1-2-3-4...

select rownum, employee_id, salary
from (select employee_id, salary
      from employees order by salary desc)
where rownum <= 10;

 

'SQL' 카테고리의 다른 글

[Oracle] with문  (0) 2022.01.08
[Oracle] comment, truncate  (0) 2022.01.05
[Oracle] Data access method, INDEX  (0) 2022.01.05
[Oracle] sequence, synonym  (0) 2022.01.05
[Oracle] VIEW  (0) 2022.01.05
Recent Posts
Popular Posts
Recent Comments