[SQL] 그룹으로 묶기 _ GROUP BY
GROUP BY
SQL에서 그룹으로 묶기 위해서는
GROUP BY
절을 사용해서결과 집합을 특정 열의 값에 따라 그룹으로 분할
할 수 있다. 예를 들어, ‘SUM(), AVG(), COUNT()’등의 집계 함수와 함께 사용되며, 이러한 집계함수는 각 그룹에 대한 정보를 제공한다.
집계 함수
집계 함수(Aggregate Function)란 여러 행의 데이터 그룹에서 단일 값을 반환하는 함수이다. 이 함수들은 데이터 집합에 대해 요약, 계산 또는 평균과 같은 통계적 분석을 수행하는데 사용할 수 있다.
함수명 | 의미 |
---|---|
COUNT() | 데이터 행의 수를 계산한다. |
SUM() | 숫자 데이터의 합계를 계산한다. |
AVG() | 숫자 데이터의 평균값을 계산한다. |
MIN() | 데이터 집합에서 최소값을 찾는다. |
MAX() | 데이터 집합에서 최대값을 찾는다. |
GROUP BY
사용
선택한 열로 그룹화: ‘GROUP BY’절은 하나 이상의 열을 포함할 수 있으며, 이 열들은 결과 집합을 그룹화하는 데 사용한다.
집계 함수 적용: 각 그룹에 대해 하나 이상의 집계 함수를 적용하여 그룹별 요약 정보를 얻을 수 있다.
선택 조건에 따른 필터링:
HAVING
절을 사용하여 그룹화된 결과에 대한 특정 조건을 적용할 수 있다. 이는 ‘WHERE’절과 유사하지만 그룹화된 결과에 적용된다.
사용 예시
TEST
ID | NUM | TEAM |
---|---|---|
0 | 1 | A |
1 | 1 | A |
2 | 2 | A |
3 | 3 | A |
4 | 3 | A |
5 | 1 | B |
6 | 2 | B |
7 | 3 | B |
8 | 4 | B |
9 | 4 | B |
10 | 1 | C |
11 | 2 | C |
SELECT TEAM
FROM TEST
GROUP BY TEAM;
(출력)
TEAM |
---|
A |
B |
C |
SELECT TEAM, COUNT(*) AS Count
FROM TEST
GROUP BY TEAM
HAVING Count > 4;
(출력)
TEAM | Count |
---|---|
A | 5 |
B | 5 |
WHERE과 함께 사용
WHERE절은 그룹하기 전 데이터에 조건을 부여하고,
HAVING
절은그룹 후 집계
에 사용한다.
1
2
3
4
5
SELECT TEAM, COUNT(*) AS Count
FROM TEST
WHERE NUM > 1
GROUP BY TEAM
HAVING Count > 2;
(출력)
TEAM | COUNT |
---|---|
A | 3 |
B | 4 |
WITH ROLLUP
‘WITH ROLLUP’을 사용해
전체의 집계값
을 얻을 수 있다. 이때 ‘WITH ROLLUP’는 ‘ORDER BY’와 함께 사용될 수 없다.
1
2
3
4
SELECT TEAM, COUNT(*)
FROM TEST
GROUP BY TEAM
WITH ROLLUP
(출력)
TEAM | COUNT(*) |
---|---|
A | 5 |
B | 5 |
C | 2 |
12 |
중복된 값 제거
DISTINCT
를 사용하여 중복된 값을 제거 할 수 있다. 이때 ‘ORDER BY’와 달리 집계함수가 사용되지 않고 정렬하지 않으므로 가볍고 빠르다.
1
2
3
SELECT TEAM, COUNT(DISTINCT NUM)
FROM TEST
GROUP BY TEAM
(출력)
TEAM | COUNT(DISTINCT NUM) |
---|---|
A | 3 |
B | 4 |
C | 2 |
This post is licensed under CC BY 4.0 by the author.