Yeonnnnny

[2과목] 2-11. 그룹 함수 본문

SQLD

[2과목] 2-11. 그룹 함수

yeonny_do 2024. 3. 6. 20:59

 그룹함수

  • 숫자함수 중 여러 값을 전달하여 하나의 요약값을 출력하는 다중행 함수
  • 수학/통계 함수들 (기술통계 함수)
  • GROUP BY 절에 의해 그룹별 연산 결과를 리턴함
  • 반드시 한 컬럼만 전달
  • NULL은 무시하고 연산

 

COUNT

  • 행의 수를 세는 함수
  • 대상 컬럼은 * 또는 단 하나의 컬럼만 전달 가능 (* 사용 시 모든 컬럼의 값이 널일 때만 COUNT 제외)
  • 문자, 숫자, 날짜 컬럼 모두 전달 가능
  • 행의 수를 세는 경우 NOT NULL컬럼을 찾아 세는 것이 좋음 (PK 컬럼)

ex) emp테이블의 전체 행의 수 

select count(*)
from emp;

 

 

SUM

  • 총 합 출력
  • 숫자 컬럼만 전달 가능

ex) 급여의 전체 총 합

select sum(sal)
from emp;

 

 

AVG

  • 평균 출력
  • 숫자 컬럼만 전달 가능
  • NULL을 제외한 대상의 평균을 리턴하므로 전체 대상 평균 연산 시 주의

 

MIN / MAX

  • 최대, 최소 출력
  • 날짜, 숫자, 문자 모두 가능 (오름차순 순서대로 최소, 최대 출력)

 

VARIANCE / STDDEV

  • 평균과 표준편차
  • 표준편차는 분산의 루트값

 

 

GROUP BY FUNCTION

  • GROUP BY 절에서 사용하는 함수
  • 여러 GROUP BY 결과를 동시에 출력(합집합) 하는 기술
  • 그룹핑할 그룹 정의 (전체 소계 등)

 

1. GROUPING SETS(A, B, ...)

  • A별, B별 그룹 연산 결과 출력
  • 나열 순서 중요하지 않음
  • 기본 출력에 전체 총계는 출력되지 않음
  • NULL 혹은 0 사용하여 전체 총 합 출력 가능

ex) depno별 sal의 총 합 결과와 job별 sal의 총 합 결과의 합집합

select deptno, job, sum(sal)
from emp
group by GROUPING SETS(deptno, job);

 

** UNION ALL로 대체 가능

select deptno, null as job, sum(sal)
from emp
group by deptno
union all 
select null as deptno, job, sum(sal)
from emp
group by job

 

ex) 부서별 급여 총 합과 업무별 급여 총 합, 그리고 전체 급여의 합을 출력

select deptno, job, sum(sal)
from emp
group by grouping sets(deptno, job, ());

 

 

2. ROLLUP(A,B)

  • A별, (A,B)별 , 전체 그룹 연산 결과 출력
  • 나열 대상의 순서가 중요함
  • 기본적으로 전체 총 계가 출력됨

ex) deptno별, (deptno, job)별, 전체 연산 결과 출력

select deptno, job, sum(sal)
from emp
group by grouping sets(deptno, job);

 

** UNION ALL로 대체 가능

select deptno, job, sum(sal)
from emp
group by deptno, job
union all
select deptno, null as job, sum(sal)
from emp
group by deptno
union all
select null as deptno, null as job, sum(sal)
from emp;

 

 

3. CUBE(A,B)

  • A별, B별, (A,B)별, 전체 그룹 연산 결과 출력됨
  • 그룹으로 묶을 대상의 나열 순서 중요하지 않음
  • 기본적으로 전체 총 계가 출력됨
select deptno, job, sum(sal)
from emp
group by cube(deptno, job);

 

** UNION ALL로 대체

select null as deptno, null as job, sum(sal)
from emp
union all
select null, job, sum(sal)
from emp
group by job
union all
select deptno, null, sum(sal)
from emp
group by deptno
select deptno, job, sum(sal)
from emp
group by deptno, job;

 

** GROUPING SETS로 대체

select deptno, job, sum(sal)
from emp
group by grouping sets(deptno, job, (deptno, job), ());

'SQLD' 카테고리의 다른 글

[2과목] 2-13. TOP N QUERY  (0) 2024.03.07
[2과목] 2-12. 윈도우 함수  (0) 2024.03.07
[2과목] 2-10. 집합 연산자  (2) 2024.03.06
[2과목] 2-9. 서브쿼리  (0) 2024.03.06
[2과목] 2-8. 표준 조인  (0) 2024.03.06