Post

[SQL] 그룹으로 묶기 _ GROUP BY

GROUP BY

SQL에서 그룹으로 묶기 위해서는 GROUP BY절을 사용해서 결과 집합을 특정 열의 값에 따라 그룹으로 분할 할 수 있다. 예를 들어, ‘SUM(), AVG(), COUNT()’등의 집계 함수와 함께 사용되며, 이러한 집계함수는 각 그룹에 대한 정보를 제공한다.

집계 함수

집계 함수(Aggregate Function)란 여러 행의 데이터 그룹에서 단일 값을 반환하는 함수이다. 이 함수들은 데이터 집합에 대해 요약, 계산 또는 평균과 같은 통계적 분석을 수행하는데 사용할 수 있다.

함수명의미
COUNT()데이터 행의 수를 계산한다.
SUM()숫자 데이터의 합계를 계산한다.
AVG()숫자 데이터의 평균값을 계산한다.
MIN()데이터 집합에서 최소값을 찾는다.
MAX()데이터 집합에서 최대값을 찾는다.

GROUP BY 사용

  1. 선택한 열로 그룹화: ‘GROUP BY’절은 하나 이상의 열을 포함할 수 있으며, 이 열들은 결과 집합을 그룹화하는 데 사용한다.

  2. 집계 함수 적용: 각 그룹에 대해 하나 이상의 집계 함수를 적용하여 그룹별 요약 정보를 얻을 수 있다.

  3. 선택 조건에 따른 필터링: HAVING절을 사용하여 그룹화된 결과에 대한 특정 조건을 적용할 수 있다. 이는 ‘WHERE’절과 유사하지만 그룹화된 결과에 적용된다.

사용 예시

TEST

IDNUMTEAM
01A
11A
22A
33A
43A
51B
62B
73B
84B
94B
101C
112C
SELECT TEAM
FROM TEST
GROUP BY TEAM;

(출력)

TEAM
A
B
C
SELECT TEAM, COUNT(*) AS Count
FROM TEST
GROUP BY TEAM
HAVING Count > 4;

(출력)

TEAMCount
A5
B5

WHERE과 함께 사용

WHERE절은 그룹하기 전 데이터에 조건을 부여하고, HAVING절은 그룹 후 집계에 사용한다.

1
2
3
4
5
SELECT TEAM, COUNT(*) AS Count
FROM TEST
WHERE NUM > 1
GROUP BY TEAM
HAVING Count > 2;

(출력)

TEAMCOUNT
A3
B4

WITH ROLLUP

‘WITH ROLLUP’을 사용해 전체의 집계값을 얻을 수 있다. 이때 ‘WITH ROLLUP’는 ‘ORDER BY’와 함께 사용될 수 없다.

1
2
3
4
SELECT TEAM, COUNT(*)
FROM TEST
GROUP BY TEAM
WITH ROLLUP

(출력)

TEAMCOUNT(*)
A5
B5
C2
 12

중복된 값 제거

DISTINCT를 사용하여 중복된 값을 제거 할 수 있다. 이때 ‘ORDER BY’와 달리 집계함수가 사용되지 않고 정렬하지 않으므로 가볍고 빠르다.

1
2
3
SELECT TEAM, COUNT(DISTINCT NUM)
FROM TEST
GROUP BY TEAM

(출력)

TEAMCOUNT(DISTINCT NUM)
A3
B4
C2
This post is licensed under CC BY 4.0 by the author.