본문 바로가기
Database/MariaDB

MariaDB : 그룹함수, GROUP BY, HAVING절에 대해서

by 코딩쥐 2024. 10. 14.

그룹함수

하나 이상의 행을 그룹으로 묶어 연산하여 총합, 평균 등 하나의 결과로 나타내는 함수를 말한다. 그룹 함수를 통하여 결과를 도출할 때 NULL값은 제외하고 출력한다.

함수 설명
SUM 그룹의 누적 합계 반환
AVG 그룹의 평균 반환
COUNT 그룹의 총 개수 반환
MAX 그룹의 최대값을 반환
MIN 그룹의 최소값을 반환
STDDEV 그룹의 표준편차를 반환
VARIANCE 그룹의 분산을 반환
# 모든 사원들의 sal(급여) 합계
SELECT SUM(sal) FROM emp; # 29,025

# deptno(부서번호) 20의 평균 사원 sal(급여)
SELECT AVG(sal) FROM emp WHERE deptno=20; # 2,175

# 사원 수 출력
SELECT COUNT(empno) FROM emp; # 14
SELECT COUNT(comm) FROM emp; # 4 - NULL 값은 제외 

# deptno(부서번호) 10 중 가장 높은 sal(급여)
SELECT MAX(sal) FROM emp WHERE deptno=10; # 5,000

# deptno(부서번호) 10 중 가장 낮은 sal(급여) 
SELECT MIN(sal) FROM emp WHERE deptno=10; # 1,300

# deptno(부서번호) 20의 sal(급여) 표준편차
SELECT STDDEV(sal) FROM emp WHERE deptno=20; #1,004.73878

 

 

GROUP BY

GROUP BY 절은 그룹함수와 함께 쓰여 그룹화된 데이터에 대해 집계 결과를 출력한다. 만약 그룹화조건이 여러개일 경우에는 그룹화조건에 컴마(,)를 사용해서 여러 조건을 줄 수 있다. 

  • SELECT 그룹함수(칼럼명) FROM 테이블 GROUP BY 그룹화조건;
# deptno(부서번호)별 평균 sal(급여) 
SELECT deptno, AVG(sal) FROM emp GROUP BY deptno;

# deptno(부서번호)별 최소 sal(급여), 최대 sal(급여)
SELECT deptno, MIN(sal), MAX(sal) FROM emp GROUP BY deptno;

# deptno(부서번호), job(직업)별 평균 sal(급여)
SELECT deptno, job, AVG(sal) FROM emp GROUP BY deptno, job;

 

HAVING 절

GROUP BY를 통해 그룹화된 결과에 조건을 적용하기 위해서 사용되는 절이다. 개별 행에 대한 조건은 WHERE 절로 처리하며, 그룹화된 결과에 대한 조건은 HAVING 절로 처리해야 한다.

  • SELECT 그룹함수(칼럼명) FROM 테이블 GROUP BY 그룹화조건 HAVING 조건;
# 평균 급여가 2000이상인 부서번호, 평균 급여
SELECT deptno, AVG(sal) from emp GROUP BY deptno HAVING AVG(sal)>=2000;

 

ROLLUP 

그룹화된 결과에 대한 추가적인 총계를 추가해서 결과를 도출한다.

  • SELECT 그룹함수(칼럼명) FROM 테이블 GROUP BY 그룹화조건 WITH ROLLUP;
SELECT deptno, AVG(sal) from emp GROUP BY deptno WITH ROLLUP;