GROUP BY 개념? SQL에서 1개 이상 데이터를 그룹화

SQL GROUP BY 개념에 대한 설명
SQL GROUP BY 개념에 대한 설명

GROUP BY 개념에 대해서 이야기해봅시다.




GROUP BY 개념에 대해 알기

GROUP BY는 SQL(Structured Query Language)에서 데이터를 그룹화할 수 있는 절입니다.

SQL 쿼리를 작성할 때 GROUP BY를 통해 소그룹 별로 기준을 정한 다음 SELECT 절에 집계 함수를 사용할 수 있습니다.

집계 함수의 통계 정보의 경우 NULL 값을 가진 행을 제외하고 수행됩니다. GROUP BY절에서는 SELECT 절과 다르게 별칭을 사용할 수 없습니다. 집계 함수는 WHERE 절에 올 수 없습니다. 이는 WHERE 절이 집계 함수를 사용할 수 있는 GROUP BY 절보다 먼저 수행되기 때문입니다. WHERE 절은 전체 데이터를 GROUP으로 나누기 전에 행들을 미리 없애는 과정을 거치게 됩니다.

HAVING 절의 경우 GROUP BY 절의 기준 항목이나 소그룹의 집계 함수를 이용한 조건을 표시할 수 있습니다. GROUP BY 절에 의해 소그룹 별로 만들어진 집계 데이터 중에서 HAVING 절에서 제한 조건을 걸어 조건을 만족한 내용만 조회 되게 끔 할 수 있습니다.

HAVING 절은 일반적으로 GROUP BY 뒤에 배치되어야 합니다.


[GROUP BY 사용 예시]

SELECT 컬럼명 (* DISTINCT 등 집계 함수 사용 가능)
FROM 테이블명
WHERE 조건식
GROUP BY 컬럼이나 표현식
HAVING 그룹 조건식




GROUP BY 개념에 대한 설명

GROUP BY는 SQL(Structured Query Language)에서 데이터를 그룹별로 묶을 수 있도록 해주는 절입니다.

GROUP BY에서는 GROUP 뒤에 수단의 전치사인 BY가 붙기 때문에 GROUP BY 뒤에 그룹핑의 기준이 되는 컬럼이 올 수 있습니다. 컬럼의 경우 하나가 될 수도 있고 한 개 이상이 될 수도 있습니다.

GROUP BY는 주로 SELECT, FROM, WHERE 다음에 사용될 수 있습니다.

GROUP BY를 통해 데이터를 집계할 수 있습니다.

데이터를 그룹별로 나누게 되면 그룹별로 집계 데이터를 도출하는 것이 가능해지는 것입니다. 특정 컬럼에 따라 그룹핑하면 해당 컬럼을 기준으로 얼마만큼의 데이터가 분포되었는지를 COUNT해볼 수 있습니다.

GROUP BY와 함께 사용할 수 있는 집계 함수에는 다양한 종류가 있습니다.

[집계 함수 종류]

구분내용
COUNT(*)전체 행을 카운트하여 반환하는 함수
COUNT(컬럼)컬럼 값이 NULL인 행을 제외하고 카운트하여 반환하는 함수
COUNT(DISTINCT 컬럼)컬럼 값이 NULL이 아닌 행에서 중복을 제거한 카운트를 반환하는 함수
SUM(컬럼)컬럼 값들의 합계를 반환하는 함수
AVG(컬럼)컬럼 값들의 평균을 반환하는 함수
MIN(컬럼)컬럼 값들의 최소 값을 반환하는 함수
MAX(컬럼)컬럼 값들의 최대 값을 반환하는 함수

집계 함수의 통계 정보는 NULL 값을 가진 데이터 행을 제외하고 수행하게 됩니다.

HAVING 절은 GROUP BY 절을 사용할 때 WHERE 절처럼 사용할 수 있는 조건절입니다. HAVING 절은 데이터를 그룹핑 한 다음 특정 그룹을 골라내기 위해서 사용하는 경우가 많습니다.

HAVING 절은 논리적으로 GROUP BY 절 다음에 수행됩니다.

따라서 그룹핑 한 다음 집계 함수를 사용하여 조건을 걸 수 있습니다. HAVING 절은 논리적으로 SELECT 절 이전에 수행됩니다. 그래서 SELECT 절에 명시되지 않은 집계 함수로 조건을 부여할 수 있게 됩니다. 다만, WHERE 절을 사용해도 되는 조건까지 HAVING 절로 사용하면 성능 측면에서는 좋지 않습니다.

SQL 쿼리 문에서는 WHERE 절에서 필터링이 먼저 진행되는 것이 성능 측면에서 유리하며 이는 GROUP BY를 할 때 처리하는 데이터량을 줄일 수 있게 해주기 때문입니다. GROUP BY는 비교적 많은 리소스가 들어가는 작업입니다. 그래서 GROUP BY를 수행하기 전에 대상이 되는 데이터량을 최소화시켜 놓는 것이 올바른 SQL 쿼리 작성 방향입니다.