GROUP BY와 HAVING 명령문
SQL에서는 더 심층적인 인사이트를 얻고 데이터베이스 내에서 데이터를 더 잘 구성하기 위해 강력한 GROUP BY
절과 HAVING
절을 도입합니다.
이러한 도구를 사용하면 행을 분류하고 집계 함수를 적용하여 원시 데이터를 의미 있는 요약으로 변환할 수 있으므로 추세를 보다 쉽게 분석하거나 패턴을 식별하거나 특정 범주에 맞는 보고서를 생성할 수 있습니다.
GROUP BY (그룹화를 위한 SQL 구문)
범주 또는 그룹별로 데이터를 분석하기 위해 SQL은 절을 GROUP BY
제공합니다. 이 절은 지정된 열의 값에 따라 행을 분류하여 데이터를 하위 집합으로 효과적으로 분할합니다.
실제 성능 GROUP BY
은 집계 함수와 함께 사용될 때 표시됩니다. 각 범주에 대한 요약 통계를 생성하기 위해 COUNT()
, SUM()
, AVG()
, MIN()
및 MAX()
와 같은 집계 함수는 이러한 그룹에서 계산을 수행합니다.
예를 들어, GROUP BY를 사용하여 각 제품 범주의 -total 판매 SUM()
, 각 공급업체의 -average 제품 가격 AVG()
, 그리고 각 도시의 -number 고객 COUNT()
을 계산할 수 있습니다.
SELECT category_id, AVG(price)
FROM sales.products
GROUP BY category_id;
이 쿼리는 테이블 행을 해당 항목에 따라 sales.products
그룹화하여 각 범주 내 제품의 category_id
평균 가격을 검색합니다.
AVG()
열에 price
함수를 적용하여, 쿼리는 각 고유한 category_id
의 모든 제품의 가격 평균을 계산합니다.
GROUP BY
절이 항상 집계 함수와 페어링될 필요는 없습니다. 그룹화된 데이터에 대한 계산을 수행하기 위해 집계 함수와 함께 일반적으로 사용되지만 열 GROUP BY
의 고유한 조합 검색과 같은 다른 용도로 데이터를 그룹으로 구성하는 데도 사용할 수 있습니다.
SELECT category_id
FROM sales.products
GROUP BY category_id;
이 쿼리는 category_id
별로 행을 그룹화하고, 집계를 수행하지 않으며 테이블의 각 고유 category_id
를 단순히 나열합니다.
가지고 있는
SQL에서는 이 절을 WHERE
사용하여 집계 함수의 결과를 필터링할 수 없습니다.
집계 함수 결과를 기반으로 GROUP BY
절에서 생성된 그룹을 필터링하려면 HAVING
절을 사용합니다.
HAVING
그룹의 절로 WHERE
생각하세요. 집계 함수에서 생성된 요약된 데이터에 조건을 적용하여 분석을 구체화하여 관련 그룹에 집중할 수 있습니다.
SELECT category_id, AVG(price)
FROM sales.products
GROUP BY category_id
HAVING AVG(price) > 30;
이 쿼리는 price
테이블의 행을 sales.products
에 따라 그룹화하여 각 범주 내의 제품의 평균 category_id
을 계산합니다. 그런 다음, 평균 price
이 30을 초과하는 범주만 포함하도록 결과를 필터링합니다. 이 작업은 HAVING
절을 사용하여 수행됩니다.