[SQL] 분석함수 SUM OVER

·2025년 7월 4일

SQL

목록 보기
65/126

문제1. 사원 테이블에서 토탈월급을 출력하시오

select sum(sal)
 from emp;

문제2. 사원 테이블에서 이름, 월급, 사원 테이블의 토탈월급을 출력하시오

select ename, sal, sum(sal) over ()
 from emp;

over: 확장해서 출력하라

문제3. 이름, 월급, 월급의 누적치를 출력하시오

-- 약식
select ename, sal, sum(sal) over (order by empno asc) as 누적치
 from emp;
 
-- 정식
select ename, sal, sum(sal) over (order by empno asc rows
                                  between unbounded preceding
                                  and current row) as 누적치
 from emp;

💡

unbounded preceding : 제일 첫번째행
unbounded following : 제일 마지막번째 행
current row : 현재행

문제4. 이름, 나이, 나이의 누적치를 출력하시오

select ename, age, sum(age) over ( order by age asc rows
                                   between unbounded preceding
                                     and current row) 누적치
 from emp21;

문제5. 통신사, 이름, 나이, 나이의 누적치를 출력하는데 통신사별로 각각 나이가 누적되게하시오

select telecom, ename, age, sum(age) over (  partition by telecom
                                             order by age asc rows
                                             between unbounded preceding
                                             and current row) 누적치
 from emp21;

문제6. 부서번호, 이름, 월급, 월급의 누적치를 출력하는데 부서번호로 별로 각각 월급의 누적치가 출력되게하시오

select deptno, ename, sal, sum(sal) over ( partition by deptno
                                           order by sal asc rows
                                           between unbounded preceding
                                           and current row) 누적치
 from emp;

💡 rows: 행을 기준으로 누적치를 구하는 것
range: 범위를 기준으로 누적치를 구하는 것

문제7. 범위기준 누적치를 구하기 위해 다음의 스크립트를 수행하시오

-- * 범위(range) 를 기준으로 range 윈도우 기준을 테스트하기 

--1.  emp 테이블을 부서번호를 ascending 하게 정렬한 결과로  emp2 테이블 생성하기

 drop   table  emp2;

 create   table  emp2
as
   select  *
    from  emp
    order  by  deptno  asc;

  select  * from emp2;

--2.  emp2 테이블의 사원들의 입사일을 부서번호별로 각각 다음과 같이 변경하시오

 update  emp2
   set  hiredate='81/01/05'
   where  deptno = 10;

 update  emp2
   set  hiredate='81/02/17'
   where  deptno = 20;

 update   emp2
   set  hiredate='81/03/21'
   where deptno = 30;

commit;

  select * from emp2;

문제8. emp2 테이블에서 이름,입사일과 월급, 월급에 대한 누적치를 출력하시오. 그런데 누적치를 구할 때 정렬기준이 월급이 아니라 입사한 사원순으로 정렬기준을 잡으세요

select ename, hiredate, sal,
      sum(sal) over ( order by hiredate asc rows
                      between unbounded preceding 
                      and current row) 누적치
from emp2;

문제9. 위의 결과를 다시 출력하는데 입사일의 범위를 기준으로 월급을 누적해서 출력하시오

select ename, hiredate, sal,
      sum(sal) over ( order by hiredate asc range
                      between unbounded preceding 
                      and current row) 누적치
from emp2;

0개의 댓글