데이터베이스 연구실.log

집계 함수와 그룹별 조회

MAX, MIN, AVG, SUM, COUNT 집계 함수와 GROUP BY로 그룹별 값을 구하는 방법, 집계 결과에 조건을 거는 HAVING, 집계 함수의 NULL 처리

MAXMINAVGSUMCOUNTGROUP BYHAVINGDISTINCT

#핵심 요약

집계(그룹) 함수는 여러 행을 하나의 값으로 만듦
MAX, MIN, AVG, SUM, COUNT

집계 함수와 일반 컬럼을 함께 출력하려면 그 컬럼으로 GROUP BY 함

집계 함수로 조건을 걸 때는 WHERE가 아니라 HAVING에 씀

COUNT(*), GROUPING, GROUPING_ID를 제외한 집계 함수는 NULL을 무시함
그래서 AVG(comm)과 AVG(NVL(comm, 0))은 결과가 다름

#개념과 동작 원리

SELECT 문의 여섯 가지 절:

절 내용 작성 순서
SELECT 검색할 컬럼 1
FROM 테이블 2
WHERE 검색 조건 3
GROUP BY 그룹으로 묶을 컬럼 4
HAVING 집계 함수를 쓴 검색 조건 5
ORDER BY 정렬할 컬럼 6

실습에서는 실행 순서를 FROM → WHERE → GROUP BY → SELECT로 적었음(HAVING과 ORDER BY는 그 문장에 없음)

COUNT(*), GROUPING, GROUPING_ID를 뺀 모든 집계 함수는 NULL을 무시함
NULL 대신 값을 넣으려면 인수에 NVL을 씀

COUNT는 NULL을 돌려주지 않고 숫자나 0을 돌려줌
나머지 집계 함수는 행이 없거나 인수가 모두 NULL이면 NULL을 돌려줌

DISTINCT(동의어 UNIQUE)를 주면 서로 다른 값만, ALL(기본값)은 중복을 포함한 모든 값을 씀
1, 1, 1, 3의 DISTINCT 평균은 2, ALL 평균은 1.5임

#필수 명령어 또는 SQL

#집계 함수와 GROUP BY

SQL Developer 또는 SQL*Plus조회만 함
SELECT MAX(sal) FROM emp WHERE job = 'SALESMAN';
SELECT MIN(sal) FROM emp WHERE job = 'SALESMAN';
SELECT ROUND(AVG(sal)) FROM emp;
SELECT COUNT(*) FROM emp;

SELECT LOWER(telecom), MAX(age)
  FROM emp19
 WHERE LOWER(telecom) = 'kt'
 GROUP BY LOWER(telecom);

SELECT deptno, MAX(sal)
  FROM emp
 GROUP BY deptno;

SELECT job, TO_CHAR(ROUND(AVG(sal)), '999,999') 평균월급
  FROM emp
 GROUP BY job;

결과 해석: emp19의 통신사 값은 대소문자가 섞여 있어 LOWER로 맞춘 뒤 묶었음

#NULL과 집계

SQL Developer 또는 SQL*Plus조회만 함
SELECT AVG(comm), AVG(NVL(comm, 0)) FROM emp;
SELECT SUM(comm), SUM(NVL(comm, 0)) FROM emp;

결과 해석:

설명: 커미션이 있는 네 명의 값(300, 500, 1400, 0)만으로 평균을 내므로 AVG(comm)은 (300 + 500 + 1400 + 0) / 4와 같음
전체 사원 수로 나누려면 NVL로 NULL을 0으로 바꿈
SUM은 NULL을 무시해도 합계가 같음

설명: COUNT는 NULL 값 문제가 있을 수 있어 *를 기본으로 씀
COUNT(컬럼)은 그 컬럼이 NULL인 행을 세지 않음

#HAVING

SQL Developer 또는 SQL*Plus조회만 함
SELECT job, SUM(sal)
  FROM emp
 GROUP BY job
HAVING SUM(sal) >= 6000;

SELECT job, SUM(sal)
  FROM emp
 WHERE job != 'SALESMAN'
 GROUP BY job
HAVING SUM(sal) >= 4000
 ORDER BY 2 DESC;

결과 해석:

연습 문제(답 확인 불가): 통신사별, 나이별, 성별 인원수, 입사 연도별 월급 합계에 천 단위 표시, 직업 종류의 개수

SEO_HKabsumveritas@gmail.comBuilt with Claude Code & Codex

마지막 갱신 개인 학습 기록이며 운영 환경 적용 전 공식 문서 확인 필요

두 글자 이상 입력, 위아래 화살표로 이동하고 Enter로 열기