MySQL 데이터베이스 이해하기 / 집계함수와 그룹함수

2025. 2. 28. 11:08·Cs기본지식/데이터베이스
목차
  1. 집계함수(aggregation), 그룹함수(group)함수 
  2. group by 
  3. having
  4. rollup
  5. grouping()

집계함수(aggregation), 그룹함수(group)함수 

지정한 group에 함수 기능 처리한 결과가 1개가 조회된다. 
group by로 그룹을 지정하지 않으면 전체 데이타가 한개의 group으로 지정된다. 
주의) group의 수와 다른 데이터를 같이 조회하면 mysql은 의미 없는 결과가 나오지만 
         oracle, db2,... 다른 DB는 error가 발생한다. 

 

- 집계함수(all | distinct 컬럼명)
all 모든 값을 처리 ==> 생략시 기본적으로 all로 처리된다.
distinct 중복된 값을 제거하고 처리

 

 - 함수 종류 
min, max, sum, avg : null을 제외하고 처리한다. 
count(*)    : 해당 테이블의 모든 행의 객수를 count한다. 
count(컬럼명) : null이 아닌 행의 개수를 count한다.

 

* count 

select comm from emp;


-- 전체 직원수를 조회
select count(*)from emp;


-- 커미션을 받는 사원 수를 조회
select count(comm)from emp;

 

* 최소 습여, 최대 급여 , 평균 급여 조회

select min(sal), max(sal), avg(sal)
from emp;

 

group by 

데이타를 특정 컬럼의 데이타 종류를 기준으로 group 으로 데이타를 분류한다. 
group by와 함께 집계함수를 사용하면 집계함수의 결과는 group개수로 조회된다.

 

-- 부서별 인원수와, 평균 급여를 조회 
select DEPTNO, count(*), avg(sal)
from emp
group by DEPTNO
order by DEPTNO;

 

-- 부사별 업부별 인원수와 평균 급여를 조회
select DEPTNO, JOB , count(*) as 근무인원 , round(avg(sal),2) as cal
from emp
group by DEPTNO , JOB -- 1차 부서별 2차 직업별 그룹
order by DEPTNO, JOB ;

 

 

*

  - where => 행 하나 하나에 대한 조건 처리  

 - having => group 집계한 결과에 대한 조건은 having절에서 처리

having

     group 집계한 결과에 대한 조건은 having절에서 한다. 
     형식]  
     select   집계함수
     from     테이블
     where    레코드 각각에 대한 조건
     group by 컬럼(알리아스), ...
     having   집계한 결과에 대한 조건(알리아스)

 

-- 부서별 평균 급여가 2000이상인 부서를 조회
select DEPTNO, avg(sal) as AvgSal
from emp
group by DEPTNO having avg(sal) >= 2000;

rollup

group별 통계에  전체 통계를 추가로 조회 
형식] group by 컬럼명 with rollup;

 

- group으로 나눈 전단계에 대한 집계

rollup( job) =>  job / job 집계

rollup( job ,sal ) => ( job ,sal)  / ( job ,sal) 집계 / job / job 집계

 

* 전체 집계

cube( job ,sal) => ( job ,sal)  / ( job ,sal) 집계 / job / job 집계 / sal / sal 집계 => oracle만 지원


-- 업무별 근무 인원, 급여 평균과, 최소 급여, 최대 급여를 조회

SELECT 
    IFNULL(job, '프리랜서') AS job, 
    COUNT(*) AS '근무 인원', 
    ROUND(AVG(sal)) AS AvgSal, 
    MIN(sal) AS MinSal, 
    MAX(sal) AS MaxSal
FROM emp
GROUP BY job WITH ROLLUP;

//오라클의 경우
//GROUP BY rollup(job);

 

=> 이렇게 하면 통계 값도 프리랜서가 됌 =>grouping 사용이 필요 !!

grouping()

  rollup에 의해 조회된 데이타는 1 그렇지 않은 데이타는 0이 조회된다. 

 

SELECT 
    IF(GROUPING(job) = 1, 'total', IFNULL(job, '프리랜서')) AS job, 
    COUNT(*) AS '근무 인원', 
    ROUND(AVG(sal)) AS AvgSal, 
    MIN(sal) AS MinSal, 
    MAX(sal) AS MaxSal
FROM emp
GROUP BY job WITH ROLLUP;

// 오라클은 if가 아닌 case로 표현

 

'Cs기본지식 > 데이터베이스' 카테고리의 다른 글

데이터베이스 연결 및 관리 / Spring JAVA  (1) 2025.03.05
MySQL 데이터베이스 이해하기 / DDL, DML ,TCL  (0) 2025.03.05
MySQL 데이터베이스 이해하기 / 서브 쿼리  (0) 2025.03.04
MySQL 데이터베이스 이해하기 /Join 연산  (0) 2025.02.28
MySQL 데이터베이스 이해하기 / select 및 내장 함수  (0) 2025.02.27
  1. 집계함수(aggregation), 그룹함수(group)함수 
  2. group by 
  3. having
  4. rollup
  5. grouping()
'Cs기본지식/데이터베이스' 카테고리의 다른 글
  • MySQL 데이터베이스 이해하기 / DDL, DML ,TCL
  • MySQL 데이터베이스 이해하기 / 서브 쿼리
  • MySQL 데이터베이스 이해하기 /Join 연산
  • MySQL 데이터베이스 이해하기 / select 및 내장 함수
startfront
startfront
startfront 님의 블로그 입니다.
startfront 님의 블로그startfront 님의 블로그 입니다.
  • startfront
    startfront 님의 블로그
    startfront
  • 전체
    오늘
    어제
    • 분류 전체보기 (42)
      • 프로젝트 (5)
        • 프로젝트 해보기 (1)
        • 디자인 알아보기 (2)
        • 프로젝트의 기본 (2)
      • 백엔드의 이해 (4)
      • React (14)
      • 프론트엔드 기본 (2)
        • Html (1)
        • Css (0)
        • JavaScript (1)
      • Cs기본지식 (14)
        • 알고리즘 (8)
        • 데이터베이스 (6)
      • Java (3)
        • Java의 이해 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
startfront
MySQL 데이터베이스 이해하기 / 집계함수와 그룹함수

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.