[DB] MySQL - 집계함수 / GROUP BY

aseol·2023년 7월 24일
0

MySQL

목록 보기
6/18
post-thumbnail

Aggregate Function

ㅤAggregate Function을 그대로 번역하면 집계 함수이다. 집계란 통계와 비슷한 의미로, 주로 GROUP BY와 함께 사용하여 그룹화를 해 주는 역할을 한다.

SUM( ) : 합계
AVG( ) : 평균
MIN( ) : 최솟값
MAX( ) : 최댓값
COUNT( ) : 특정 컬럼의 ROW 개수를 세고 싶을 때 COUNT(특정 컬럼 이름)을 사용한다.

💡 <해당 컬럼에 NULL이 있는 경우>
COUNT(특정 컬럼 이름)을 이용하여 특정 컬럼 이름을 명시하고 세면
➡ NULL을 무시하고 카운팅
COUNT( )를 이용하여 해당 컬럼 전부를 세면
➡ NULL을 포함하여 카운팅

GROUP BY

GROUP BY는 ROW들을 그룹으로 묶어 주는 역할을 하여 속성 값이 같은 데이터들끼리 그룹을 만들 수 있다. 이렇게 GROUP BY로 묶은 그룹은 반드시 SELECT에서 포함 을 시켜 주어야 한다.

국가코드별로 그룹을 묶고, 그 그룹에 해당하는 도시들의 인구수를 sum()을 이용해 모두 더한 결과


GROUP BY로 묶고 그 데이터 그룹의 조건을 설정하려면 HAVING 조건식을 작성해야 한다.

  • 예시 1

  • 예시 2

  • 예시 3
    회원 id별 총 구매 개수를 구하려 하는 경우

집계함수를 사용하지 않고 실행하니 GROUP BY 쿼리 결과가 이상하게 나온다.
  • 예시 4
    주문 수량이 가장 많았던 / 가장 적었던 주문의 구매자와 구매 개수를 알고 싶은 경우

이러한 경우 GROUP BY 사용하면 값이 이상하게 나오기 때문에 서브쿼리를 사용해 줘야 한다 

서브쿼리 사용한 경우 

🆘 GROUP BY를 작성하고 쿼리 실행시 ··· sql_mode=only_full_group_by 에러 발생시 🔽

SET SESSION sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

실행해 주기 !

HAVING

ㅤ집계함수에 대한 조건을 제한하는 역할을 하며, 조건식 작성시 집계함수를 사용한다.

💡 WHERE절과 함께 사용하는 경우
(SQL의 조건이 모호해질 수 있기 때문에)
WHERE절 뒤에 작성

0개의 댓글