다중행 함수와 데이터 그룹화

조예빈·2024년 4월 3일
0

Oracle

목록 보기
4/26
post-custom-banner
입력출력
단일행 함수11
다중행 함수1이상1

다중행 함수(multiple-row function)

  • 여러 행을 바탕으로 하나의 결과 값을 도출하기 위한 함수
  • 집계 함수는 개수를 셀 때 NULL은 빼고 센다
SELECT SUM(SAL)
	FROM EMP;

SELECT SUM(SAL)
	FROM EMP;

GROUP BY

  • 값을 원하는 열로 묶어 출력

    SELECT [조회할 열1 이름], [열2 이름], ... [열N 이름]
    FROM [조회할 테이블 이름]
    WHERE [조회할 행을 선별하는 조건식]
    GROUP BY [그룹화할 열을 지정(여러 개 선택 가능)]
    ORDER BY [정렬하려는 열 지정]

SELECT AVG(SAL), DEPTNO
FROM EMP
GROUP BY DEPTNO

HAVING

  • SELECT문에 GROUP BY절이 존재할 때만 사용 가능
  • GROUP BY 절을 통해 그룹화된 결과 값의 범위를 제한하는 데 사용
SELECT DEPTNO, JOB, SAL
FROM EMP
WHERE SAL <= 3000
ORDER BY DEPTNO, JOB;

ROLLUP, CUBE, GROUPING SETS

  • GROUP BY절에 지정할 수 있는 특수 함수
  • 그룹화 데이터의 합계를 출력할 때 유용하게 사용

    SELECT [조회할 열1 이름],[열2 이름],...,[열N 이름]
    FROM [조회할 테이블 이름]
    WHERE [조회할 행을 선별하는 조건식]
    GROUP BY ROLLUP/CUBE [그룹화 열 지정(여러 개 지정 가능)];

  • GROUPING SETS는 부서별, 직업별 별도 소계
SELECT DEPTNO, JOB, COUNT(*), SUM(SAL), AVG(SAL)
FROM EMP GROUP BY GROUPING SETS(DEPTNO, JOB);

  • CUBE는 모든 조합의 수 별 소계(맨위 NULL) : 모든 조합의 수를 구하라 하면 무조건 CUBE
SELECT DEPTNO, JOB, COUNT(*), SUM(SAL), AVG(SAL)
FROM EMP GROUP BY CUBE(DEPTNO, JOB);

그룹화 함수

  • 데이터 자체의 가공이나 특별한 연산 기능을 수행하지는 않음
  • 그룹화 데이터의 식별이 쉽고 가독성을 높이기 위한 목적으로 사용
  • ROLLUP, CUBE함수를 사용한 GROUP BY 절에 그룹화 대상으로 지정된 열이 그룹화된 상태로 결과가 집계되었는지 확인하는 데 사용
  • GROUP BY절에 명시된 열 중 하나를 지정할 수 있음

SELECT [조회할 열1 이름], [열2 이름], .., [열N 이름]
GROUPING [GROUP BY절에 ROLLUP 또는 CUBE에 명시한 그룹화 할 열 이름]
FROM [조회할 테이블 이름]
WHERE [조회할 행을 선별하는 조건식]
GROUP BY ROLLUP/CUBE [그룹화할 열];

LISTAGG 함수

  • 오라클 11g 버전부터 사용할 수 있는 함수
  • 그룹에 속해 있는 데이터를 가로로 나열할 때 사용
  • 각 출력 정보에 비해 행이 많아질 때 사용

    SELECT [조회할 열1 이름], [열2 이름], ... ,[열N 이름]
    LISTAGG([나열할 열(필수)], [각 데이터를 구분하는 구분자(선택)])
    WITHIN GROUP(ORDER BY 나열할 열의 정렬 기준 열(선택))
    FROM [조회할 테이블 이름]
    WHERE [조회할 행을 선별하는 조건식];

CONNECT BY

  • 계층형(TREE구조를 조회)
  • 오라클에서만 사용
SELECT EMPNO, MGR, ENAME
FROM EMP
START WITH MGR IS NULL
CONNECT BY PRIOR EMPNO = MGR;

SELECT LEVEL, LPAD(' ',(LEVEL-1)*4),EMPNO, MGR, ENAME
FROM EMP
START WITH MGR IS NULL
CONNECT BY PRIOR EMPNO = MGR;

profile
컴퓨터가 이해하는 코드는 바보도 작성할 수 있다. 사람이 이해하도록 작성하는 프로그래머가 진정한 실력자다. -마틴 파울러
post-custom-banner

0개의 댓글