-
DB_Oracle,SQL Having, ROLLUP, CUBE, GROUPING SETS, LISTAGG ~ WITHIN GROUP, PIVOT, UNPIVOT
2021. 11. 5.
HAVING 절
SELECT문에 GROUP BY 절이 존재할 때만 사용 가능
GROUP BY 절을 통해 그룹화된 결과 값의 범위를 제한하는 데 사용
GROUP BY 절과 동일하게 별칭 사용 불가
SELECT DEPTNO, JOB, AVG(SAL) FROM EMP GROUP BY DEPTNO, JOB HAVING AVG(SAL) >= 2000 ORDER BY DEPTNO, JOB;
ROLLUP, CUBE, GROUPING SETS 는 GROUP BY 절에 지정할 수 있는 특수 함수
ROLLUP : 명시한 열에 한 해 결과 출력
SELECT DEPTNO, JOB, COUNT(*), MAX(SAL), SUM(SAL), AVG(SAL) FROM EMP GROUP BY ROLLUP(DEPTNO, JOB);
CUBE : 지정한 모든 열에서 가능한 조합의 결과를 모두 출력
SELECT DEPTNO, JOB, COUNT(*), MAX(SAL), SUM(SAL), AVG(SAL) FROM EMP GROUP BY CUBE(DEPTNO, JOB);
GROUPING SETS : 지정한 열을 각각 그룹화하여 결과 값 출력
SELECT DEPTNO, JOB, COUNT(*) FROM EMP GROUP BY GROUPING SETS(DEPTNO, JOB);
LISTAGG ~ WITHIN GROUP : 가로로 나열할 열을 지정하고, 데이터 사이 넣을 구분자 지정 및 정렬
SELECT DEPTNO, LISTAGG(ENAME, ‘,’) WITHIN GROUP(ORDER BY SAL DESC) AS ENAMES FROM EMP GROUP BY DEPTNO;
PIVOT : 기존 테이블 행을 열로 바꿈
11g버전부터 사용되는 함수이고, 이전 버전에서는 DECODE를 활용하여 같은 결과를 출력
SELECT DEPTNO, JOB, MAX(SAL) FROM EMP GROUP BY DEPTNO, JOB ORDER BY DEPTNO, JOB; SELECT * FROM (SELECT DEPTNO, JOB, SAL FROM EMP) PIVOT(MAX(SAL) FOR DEPTNO IN (10, 20, 30)) ORDER BY JOB;
UNPIVOT : PIVOT 함수와 반대 기능
SELECT * FROM ( SELECT DEPTNO, MAX(DECODE(JOB, 'CLERK', SAL)) AS "CLERK", MAX(DECODE(JOB, 'SALESMAN', SAL)) AS "SALESMAN", MAX(DECODE(JOB, 'PRESIDENT', SAL)) AS "PRESIDENT", MAX(DECODE(JOB, 'MANAGER', SAL)) AS "MANAGER", MAX(DECODE(JOB, 'ANALYST', SAL)) AS "ANALYST" FROM EMP GROUP BY DEPTNO ORDER BY DEPTNO ) UNPIVOT( SAL FOR JOB IN (CLERK, SALESMAN, PRESIDENT, MANAGER, ANALYST) ) ORDER BY DEPTNO, JOB;
'개발 > DB' 카테고리의 다른 글
DB_Oracle,SQL ANSI JOIN(SQL-99 표준문법 조인), JOIN ~ ON, OUTER JOIN (0) 2021.11.08 DB_Oracle,SQL 조인, 등가조인, 비등가조인, 자체조인, 외부조인 (0) 2021.11.08 DB_Oracle 서브쿼리, 단일행/다중행 서브쿼리, 인라인 뷰, 스칼라 서브쿼리 (0) 2021.11.04 DB_Oracle,SQL 롤(ROLE), 롤 부여 순서, 롤 데이터 사전, 롤 로직 (0) 2021.09.27 DB_Oracle,SQL OBJECT 종류, TABLE, VIEW, SEQUENCE, SYNONYM, INDEX SQL 개념, 사용법 (0) 2021.09.27 댓글 (비로그인 댓글 허용하지 않습니다.)