Database/MySQL

[MySQL]GROUP BY절과 집계 함수

GAEBAL 2023. 2. 7. 22:10
728x90

집계 함수란?

https://seokmimmmmmmmm.tistory.com/224

 

[MySQL]집계 함수에 관하여

집계 함수란? 집계 함수는 결과 레코드들에 대한 레코드의 개수, 값들의 합, 최대값, 최소값, 평균 등 산술적인 연산의 결과를 얻을 수 있게 해줌 !!! 또한, 여러 행으로부터 하나의 결과값을 반환

seokmimmmmmmmm.tistory.com

위 글에서 알 수 있다시피 집계 함수란 여러 행으로부터 하나의 결과값을 반환하는 함수이다.

 

 💡 그러므로 SELECT 절에서 다른 컬럼과 같이 조회하는 경우에는 문제가 발생할 수도 있다! (단일 컬럼 조회면 집계 함수가 사용되어도 상관 없음)

그렇기 때문에 GROUP BY절과 함께 사용되는 경우가 많다 !!!

 

이게 뭔말이냐 하면

 

 

 

SELECT절에서의 집계 함수 단일 사용

-- 총 주문량 컬럼의 개수(NULL 제외)
SELECT
	COUNT(TOTAL_ORDER)
FROM
	FIRST_HALF;

-- 총 주문량의 총합
SELECT
	SUM(TOTAL_ORDER)
FROM
	FIRST_HALF;

-- 총 주문량의 평균
SELECT
	AVG(TOTAL_ORDER)
FROM
	FIRST_HALF;

-- 총 주문량 중 가장 큰 값
SELECT
	MAX(TOTAL_ORDER)
FROM
	FIRST_HALF;

-- 총 주문량 중 가장 작은 값
SELECT
	MIN(TOTAL_ORDER)
FROM
	FIRST_HALF;

-- 검색된 행의 개수를 출력
SELECT
	COUNT(*)
FROM
	ANIMAL_INS;

이렇게는 사용 가능하지만,

 

예를 들어서 FIRST_HALF 테이블에서 같은 매장(SHOP_ID)에 속하는 아이스크림들의 평균 총 주문량(TOTAL_ORDER)을 알아보고 싶다고 생각하면?

 

SELECT
	SHOP_ID,
	AVG(TOTAL_ORDER)
FROM
	FIRST_HALF;

이렇게 되면 AVG(TOTAL_ORDER)는 전체 테이블에 대하여 수행이 되어 1개의 행을 반환하지만, SHOP_ID 열은 여러개의 결과를 반환하기 때문에 문제가 발생한다 !!!

 

 

 

GROUP BY절과 집계 함수

그렇기 때문에 집계 함수를 한번에 적용하는 것이 아닌 특정 그룹마다 집계 함수를 구하기 위한 방법으로 GROUP BY절을 사용하는 것이다 !!!

 

SELECT
	SHOP_ID,
	AVG(TOTAL_ORDER)
FROM
	FIRST_HALF
GROUP BY
	SHOP_ID
ORDER BY
	SHOP_ID;

위의 쿼리를 고치면 이렇게 된다 !

가게 아이스크림의 총 주문량을 구할 수 있게 된 것이다 !

 

 

 

결론

"그룹"처럼 뭐시기 ""이라는 단어가 들어가면 GROUP BY를 항상 떠올려야 한다.

그보다 쿼리 실행 순서가 어떻게 되는지 항상 생각하면서 쿼리를 짜다보면 자연스럽게 적응이 될 것으로 보임 !

 

쿼리 실행 순서

💡 FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY
728x90