MySQL : 집계함수와 GROUP BY, HAVING

msung99·2022년 10월 29일
1
post-thumbnail

안녕하세요, 이번 포스팅에서는 집계함수(SUM, AVG, COUNT, MIN, MAX) 와 GROUP BY절, 그리고 HAVING 절에 대해 알아보도록 하겠습니다.

선수지식으로 SELECT절에 대한 기초지식이 필요합니다. SELECT 문을 아직 잘 모르신다면 아래의 제 지난 포스팅 링크를 참고하셔도 좋을듯합니다.

https://velog.io/@msung99/MySQL-SELECT


1. 집계함수

집계함수란?

집계함수는 값에 대해서 특정 연산을 수행하는 함수들을 의미합니다.
합계를 구하는 SUM 함수, 평균을 구하는 AVG 함수, 개수를 세는 COUNT 함수등이 이에 해당합니다.


SUM 함수

합계를 구하는 함수

SELECT SUM(salary) FROM employee; // salary 컬럼들의 총 합을 구함

NULL 값이 있는경우에는 어떻게 구하는가?

만일 NULL 값을 저장하고 있는 commission 컬럼이 있다고 가정해봅시다.
이떄 NULL 값을 저장하고 있는 것들은 무시하고, 나머지 값들로만 합계를 구합니다.


AVG 함수

평균을 구하는 함수
마찬가지로 NULL 값들은 무시 하고 평균을 구합니다.

SELECT AVG(salary) FROM employee;  

COUNT 함수

개수를 새는 함수
또 마찬가지로 NULL 값들은 무시를 합니다. 즉, NULL을 제외한 나머지 정상적인 값이 존재하는 데이터에 대한 개수 카운팅하는 것입니다.

SELECT COUNT(salary), COUNT(commission) FROM employees;

MIN, MAX 함수

최댓값과 최솟값을 구하는 함수

SELECT MIN(salary), MAX(salary) FROM employees;

2. GROUP BY

테이블에서 특정 그룹을 만들 수 있도록 하는 것

예를들어 GROUP BY 'A' 라고 한다면, A 컬럼에서 같은 것끼리 묶어서 하나의 GROUP 을 만드는 것입니다.

이를 적용해서, 각 job 컬럼에 대한 salary 의 평균, 각 job 컬럼에 대한 salary 의 합계 등 특정 그룹별로 집계함수(SUM,AVG,COUNT 등) 를 사용 가능합니다.

예제

SELECT job as 직급, AVG(salary) as 월급평균
FROM employee GROUP BY job;

각 job별로 그룹화되어서 AVG 함수의 결과값이 나오는 것을 확인할 수 있습니다.

SELECT name as 이름, job as 직급, AVG(salay) as 월급평균
FROM employee GROUP BY job, name;


3. HAVING

앞서 살펴본 GROUP BT 절을 통해 만들어진 그룹에 대해서 조건을 거는것입니다.

WHERE 절 VS HAVING 절

기본적으로 WHERE절은 모든 레코드(행)에 대해서 조건을 적용하게 된다.
하지만 HAVING 절은 GROUP BY절을 통해 만들어진 GROUP 들에만 조건을 적용한다.

예제

  1. 각 직급에 대해 3명 이상인 직급과 그 인원수를 출력
SELECT job 직급, COUNT(job) '직급 수' FROM employee
GROUP BY job HAVING COUNT(job) >= 3;
  1. 월급이 300만원 이상인 사람들에 대해서 직급별로 2명이상인 직급과 그 직급의 월급 평균을 구하고 출력
SELECT job 직급, AVG(salary) 월급평균 FROM employee
WHERE salary >= 300 GROUP BY job HAVING COUNT(job) >= 2;
profile
블로그 이전했습니다 🙂 : https://haon.blog

0개의 댓글