728x90
집계 함수란?
https://seokmimmmmmmmm.tistory.com/224
위 글에서 알 수 있다시피 집계 함수란 여러 행으로부터 하나의 결과값을 반환하는 함수이다.
💡 그러므로 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