SQL/MySQL

MySQL 집계 함수, GROUP BY와 HAVING 사용 방법

진리뷰 2023. 9. 11. 09:00
반응형

 

 

MySQL-집계함수-GROUPBY-HAVING-사용-방법-썸네일
집계 함수, GROUP BY, HAVING 설명

 

 

이 글은 MySQL에서 자주 쓰는 집계 함수 종류 정리,

집계 함수와 쓰이는 GROUP BY 그리고 조건절 HAVING 설명, 사용 방법, 예시를 담았습니다.

 

 


 

MySQL 집계 함수(Aggregate Functions)

 

MySQL에서 집계 함수는 평균, 최대, 최소, 합... 등 NULL 값을 제외하고 계산하는 함수입니다.

또한 SELECT문과 함께 사용합니다.

 

 

자주 쓰는 집계 함수 종류

 

  • COUNT(): 특정 컬럼 행의 개수, BIGINT 타입, 숫자 데이터 외에도 사용 가능
SELECT COUNT(컬럼명) FROM 테이블명; 

*COUNT 관련 글 MySQL COUNT 함수 특정 값 개수 찾기

 

  • MIN(): 특정 컬럼 행의 최소 값(숫자 데이터에만 사용 가능)
SELECT MIN(컬럼명) FROM 테이블명;

 

  • MAX(): 행의 최대 값(숫자 데이터에만 사용 가능)
SELECT MAX(컬럼명) FROM 테이블명;

 

  • SUM(): 행의 합산 값(숫자 데이터에만 사용 가능)
SELECT SUM(컬럼명) FROM 테이블명;

 

  • AVG(): 행의 평균 값(숫자 데이터에만 사용 가능)
SELECT AVG(컬럼명) FROM 테이블명;

 


 

MySQL GROUP BY와 HAVING

 

SELECT WHERE처럼, GROUP BY와 짝인 HAVING에 대해 알려드리겠습니다.

 

 

GROUP BY 절, 사용 방법

 

GROUP BY 절은 하나 이상의 컬럼을 기준으로 여러 데이터를 그룹화합니다.

또한 위에서 언급된 집계 함수와 자주 쓰입니다.

 

SELECT문 그룹_컬럼명: 그룹화하려는 컬럼명 입력, 이는 GROUP BY 절에 포함 되어야 함.

[WHERE 조건]: WHERE 조건절 생략 가능

SELECT 그룹_컬럼명1, 그룹_컬럼명2,..., 집계_함수() FROM 테이블
[WHERE 조건]
GROUP BY 그룹_컬럼명1, 그룹_컬럼명2,..., ;

 

 

GROUP BY 절 사용 방법 예시

 

회원_정보 테이블에서 지역별 회원 수를 확인하고자 합니다.

회원_정보  
이름 지역
김치짱 서울
오메기떡짱 경기
과자최고 경기
빨간어묵먹고싶다 서울
곱창쏘맥최고 경기

 

이때 집계 함수 COUNT와 GROUP BY를 사용해서 '지역'으로 그룹화합니다.

아래처럼 GROUP BY는 수 많은 데이터를 그룹화하여 구체적으로 편리하게 확인할 수 있습니다.

SELECT 지역, COUNT(*) FROM 회원_정보 GROUP BY 지역;
지역 COUNT(*)
경기 3
서울 2

 

 

HAVING 절, 사용 방법

 

HAVING 절은 그룹에 조건 설정할 때 사용하므로, GROUP BY와 함께 쓰입니다.

조건절이라는 점은 WHERE과 공통점입니다.

하지만 HAVING과 달리, WHERE는 집계함수 사용 불가합니다.

*HAVING과 WHERE의 구체적인 차이점은 다음 글에서 다루겠습니다.

 

집계함수와 더불어, 비교(>, <, <=...), 논리(AND, OR...), IN, LIKE 연산자 사용 가능합니다.

*LIKE 연산자 관련 글 MySQL LIKE 여러 개 검색(LIKE IN), REGEXP 사용 방법

 

HAVING 집계_함수_조건: 집계_함수()에 조건 설정, 이때 조건은 GROUP BY절 컬럼에 적용. 

SELECT 그룹_컬럼명1, 그룹_컬럼명2,..., 
집계_함수() 
FROM 테이블
[WHERE 조건]
GROUP BY 그룹_컬럼명1, 그룹_컬럼명2,...
HAVING 집계_함수_조건;

 

 

HAVING 절 사용 방법 예시

 

회원_정보 테이블에서 지역별 회원 수가 3명 이상인 지역만 필터링하고자 합니다.

회원_정보
이름 지역
김치짱 서울
오메기떡짱 경기
과자최고 경기
빨간어묵먹고싶다 서울
곱창쏘맥최고 경기
내가좋아하는냉면 제주

 

SELECT 지역, COUNT(지역) AS 회원cnt FROM 회원_정보 GROUP BY 지역 HAVING 지역 > 2;
지역 회원cnt
경기 3

 

반응형
top