- Today
- Total
Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 엘리멘터
- function
- Oracle
- spring boot
- Hostinger
- 환경세팅
- 프로시저
- PROCEDURE
- 클론코딩
- 이클립스
- dbeaver
- 문제해결
- 함수
- 워스프레스
- pl/sql
- 배열
- wordpress
- 워드프레스
- 트러블슈팅
- JSP
- iframe
- PLSQL
- sql
- javascript
- 오류해결
- 오라클
- 자바스크립트
Archives
개발 공부중
[ORACLE] 그룹함수 CUBE와 ROLLUP 사용예시와 차이점 본문
CUBE와 ROLLUP을 활용한 데이터를 그룹화 예시
-- "DEPT" 테이블 생성
CREATE TABLE "DEPT"
(DEPTNO NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY,
DNAME VARCHAR2(14),
LOC VARCHAR2(13) ) ;
-- "EMP" 테이블 생성
CREATE TABLE EMP
(EMPNO NUMBER(4) CONSTRAINT PK_EMP PRIMARY KEY,
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR NUMBER(4),
HIREDATE DATE,
SAL NUMBER(7,2),
COMM NUMBER(7,2),
DEPTNO NUMBER(2) CONSTRAINT FK_DEPTNO REFERENCES DEPT);
INSERT INTO DEPT VALUES (10,'ACCOUNTING','NEW YORK');
INSERT INTO DEPT VALUES (20,'RESEARCH','DALLAS');
INSERT INTO DEPT VALUES (30,'SALES','CHICAGO');
INSERT INTO DEPT VALUES (40,'OPERATIONS','BOSTON');
INSERT INTO EMP VALUES (7369,'SMITH','CLERK', 7902,to_date('17-12-1980','dd-mm-yyyy'), 800,NULL,20);
INSERT INTO EMP VALUES (7499,'ALLEN','SALESMAN', 7698,to_date('20-2-1981', 'dd-mm-yyyy'),1600,300, 30);
INSERT INTO EMP VALUES (7521,'WARD','SALESMAN', 7698,to_date('22-2-1981', 'dd-mm-yyyy'),1250,500, 30);
INSERT INTO EMP VALUES (7566,'JONES','MANAGER', 7839,to_date('2-4-1981', 'dd-mm-yyyy'),2975,NULL,20);
INSERT INTO EMP VALUES (7654,'MARTIN','SALESMAN',7698,to_date('28-9-1981', 'dd-mm-yyyy'),1250,1400,30);
INSERT INTO EMP VALUES (7698,'BLAKE','MANAGER', 7839,to_date('1-5-1981', 'dd-mm-yyyy'),2850,NULL,30);
INSERT INTO EMP VALUES (7782,'CLARK','MANAGER', 7839,to_date('9-6-1981', 'dd-mm-yyyy'),2450,NULL,10);
INSERT INTO EMP VALUES (7788,'SCOTT','ANALYST', 7566,to_date('13-07-1987','dd-mm-yyyy'),3000,NULL,20);
INSERT INTO EMP VALUES (7839,'KING','PRESIDENT', NULL,to_date('17-11-1981','dd-mm-yyyy'),5000,NULL,10);
INSERT INTO EMP VALUES (7844,'TURNER','SALESMAN',7698,to_date('8-9-1981', 'dd-mm-yyyy'),1500,0, 30);
INSERT INTO EMP VALUES (7876,'ADAMS','CLERK', 7788,to_date('13-07-1987','dd-mm-yyyy'),1100,NULL,20);
INSERT INTO EMP VALUES (7900,'JAMES','CLERK', 7698,to_date('3-12-1981', 'dd-mm-yyyy'), 950,NULL,30);
INSERT INTO EMP VALUES (7902,'FORD','ANALYST', 7566,to_date('3-12-1981', 'dd-mm-yyyy'),3000,NULL,20);
INSERT INTO EMP VALUES (7934,'MILLER','CLERK', 7782,to_date('23-1-1982', 'dd-mm-yyyy'),1300,NULL,10);
COMMIT;
위처럼 테이블과 데이터를 만들어줬다.
아래는 CUBE와 ROLLUP을 사용하여
두 테이블의 부서코드(DEPTNO) 가 같은 항목을 JOIN 하여 부서별 연봉 합계(SAL)와 인원수를 구하기
CUBE (큐브)
CUBE는 지정한 모든 열에서 가능한 조합의 결과를 출력하는 기능
- 가능한 모든 조합을 포함한 결과를 생성하므로 결과 집합이 상대적으로 크게 될 수 있다.
- 결과 집합에는 원본 데이터에서 값이 없는 경우에도 NULL 값이 포함된다.
-- cube 지정한 모든 열에서 가능한 조합의 결과 출력 (rollup보다 더 많은 결과)
SELECT d.DNAME, sum(e.SAL), count(e.EMPNO) FROM EMP e JOIN DEPT d ON e.DEPTNO = d.DEPTNO
GROUP BY CUBE(d.DNAME, e.JOB) ;
ROLLUP (롤업)
ROLLUP은 소그룹부터 대그룹 순서로 각 그룹별 결과를 출력하고, 마지막에는 전체 데이터의 결과를 출력하는 기능
- 그룹화 수준이 점차 커지므로 결과 집합이 CUBE에 비해 상대적으로 작을 수 있다.
- NULL 값을 생성하지 않으며, 대신 부분 합계에는 NULL이 아닌 해당 열의 마지막 실제 값이 사용됩니다.
-- rollup: 소그룹부터 대그룹 순서로 각 그룹별 결과 출력, 마지막에 총 데이터 결과 출력
SELECT d.DNAME, sum(e.SAL), count(e.EMPNO) FROM EMP e JOIN DEPT d ON e.DEPTNO = d.DEPTNO
GROUP BY ROLLUP(d.DNAME, e.JOB) ;
'ORACLE' 카테고리의 다른 글
[ORACLE] UNION 과 UNION ALL 사용예시와 오류 해결 방법 (0) | 2023.12.11 |
---|---|
[ORACLE] FUNCTION/PROCEDURE 차이점과 사용방법 (0) | 2023.11.30 |
[ORACLE] ROWNUM = 1 사용해서 중복데이터 오류 해결하고 하나의 로우만 가져오기 (0) | 2023.09.07 |
ORA-01045 / ORA-01950 - 사용자 권한부여 / 할당량부여 (0) | 2023.01.04 |
DBeaver(디비버)에서 오라클(Oracle) 연결하기 (0) | 2023.01.01 |
Comments