/* =========================== */
[ 개발 환경 설정 ]
개발 툴 : Toad
개발 언어 : Oracle
/* =========================== */
/* =========================== */
[소스 코드]
/* [sum over partition by 사용해서 그룹별 누적 합계 및 총 합계 구하기 실시] 1. partition by : 소그룹을 만들때 사용합니다 2. unbounded preceding - current row : 처음행부터 현재행까지 계속 순차적 누적 합계를 구합니다 3. 누적 합계 시 order by 컬럼이 중복되지않는 값을 가지고 있어야합니다 */ select distinct t_name, t_age, t_dept, sum(t_age)over(partition by t_dept order by t_name desc --누적 합계 시 order by 컬럼이 중복되지않는 값을 가지고 있어야합니다 rows between unbounded preceding and current row) as 누적합계, sum(t_age)over(partition by t_dept) as 총합계 from test_user order by t_dept asc;/* =========================== */
[결과 출력]
/* =========================== */
/* =========================== */
[요약 설명]
1. partition by : 소그룹을 만들때 사용합니다
2. unbounded preceding - current row : 처음행부터 현재행까지 계속 순차적 누적 합계를 구합니다
3. 누적 합계 시 order by 컬럼이 중복되지않는 값을 가지고 있어야합니다
/* =========================== */
오라클의 SELECT 쿼리문의 GROUP BY 합계(sum)의 Total을 추가적으로 출력하고자 할 경우 사용하는 구문 입니다.
- ROLLUP : 맨 마지막 행에 Total 출력
SELECT class, sum(score)
FROM std
GROUP BY ROLLUP(class);
- 설명 : class로 그룹핑 된 score의 sum을 출력하고, 맨 마지막 행에 score의 전체 토탈을 추가로 출력된다.
SELECT class, sex, sum(score)
FROM std
GROUP BY ROLLUP(class, sex);
- 설명 : class 그룹핑이 끝나는 행 다음마다 각 class의 토탈을 추가로 출력하고,
맨 마지막에 전체의 토탈을 추가로 출력된다.
- CUBE : 첫번째 행에 Total 출력
SELECT class, sum(score)
FROM std
GROUP BY CUBE(class);
- 설명 : 첫번째 행에 score의 전체 토탈이 출력되고, 다음 행부터 각 class의 sum이 출력된다,
SELECT class, sex, sum(score)
FROM std
GROUP BY CUBE(class, sex);
- 설명 : 첫번째 행부터 전체의 토탈, sex의 토탈, 그리고 class, sex의 sum 순으로 출력된다.
.....
이 글이 도움이 되었기를 바랍니다. ^-^
공감♡ 클릭과 댓글은 글쓰기에 큰 힘이 됩니다.
[Oracle] 조건이 같은 것끼리 SUM하기
담당 시스템에서 기준 컬럼 잡고 SUM 할 일이 많은데 매번 까먹곤 했다. 휴. 이제 기억하겠지. 기준 나누는걸 partition이라고 하니깐.. rollup은 잘 안 씀. group by 쓰긴 쓰지만, rollup은 sum이랑 떨어져있어서 안심이 안 돼 어떨 때 사용? 특정한 컬럼의 값이 동일한 값을 가지는 데이터들의 합을 구할 때 예를 들어 아래와 같이 A,B 컬럼을 가지는 Table이 있다고 하면 B의 값이 '가'인 것들끼리 묶어서 A값의 합을 구하고, '나'인 것들끼리 A값의 합을 구하고..
쿼리 select sum(더하기 할 컬럼) over (partition by기준이 되는 컬럼) from 테이블명; (예제) select sum(A) over (partition by B) from Table; rollup 사용 가능 select sum(더하기 할 컬럼) from 테이블명 group by rollup(기준이 되는 컬럼), 더하기 할 컬럼; (예제) select sum(A) from Table group by rollup(B), A; ※참고 //umhj75.tistory.com/entry/SUM-OVER-ORACLE-%EB%82%B4%EC%9E%A5-%ED%95%A8%EC%88%98-ORACLE
|