

 Amazon Redshift는 패치 198부터 새 Python UDF 생성을 더 이상 지원하지 않습니다. 기존 Python UDF는 2026년 6월 30일까지 계속 작동합니다. 자세한 내용은 [블로그 게시물](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)을 참조하세요.

# GROUP BY 절
<a name="r_GROUP_BY_clause"></a>

GROUP BY 절은 쿼리에 대한 그룹화 열을 식별합니다. 이는 테이블에서 나열된 모든 열에 같은 값이 있는 행을 그룹화하는 데 사용됩니다. 열이 나열된 순서는 중요하지 않습니다. 결과는 공통 값을 가진 각 행 세트를 그룹의 모든 행을 나타내는 하나의 그룹 행으로 결합하는 것입니다. GROUP BY를 사용하여 출력의 중복을 제거하고 그룹에 적용되는 집계를 계산합니다. 쿼리가 SUM, AVG 및 COUNT와 같은 표준 함수로 집계를 계산할 때 그룹화 열을 선언해야 합니다. 자세한 내용은 [집계 함수](c_Aggregate_Functions.md) 섹션을 참조하세요.

## 구문
<a name="r_GROUP_BY_clause-syntax"></a>

```
[ GROUP BY  expression [, ...] | ALL | aggregation_extension  ]
```

여기서 *aggregation\_extension*은 다음 중 하나입니다.

```
GROUPING SETS ( () | aggregation_extension [, ...] ) |
ROLLUP ( expr [, ...] ) |
CUBE ( expr [, ...] )
```

## 파라미터
<a name="r_GROUP_BY_clause-parameters"></a>

 * expression*  
열 또는 표현식의 목록은 쿼리의 선택 목록에 있는 비집계 표현식의 목록과 일치해야 합니다. 예를 들어, 다음과 같이 간단한 쿼리를 생각해 보세요.  

```
select listid, eventid, sum(pricepaid) as revenue,
count(qtysold) as numtix
from sales
group by listid, eventid
order by 3, 4, 2, 1
limit 5;

listid | eventid | revenue | numtix
-------+---------+---------+--------
89397  |      47 |   20.00 |      1
106590 |      76 |   20.00 |      1
124683 |     393 |   20.00 |      1
103037 |     403 |   20.00 |      1
147685 |     429 |   20.00 |      1
(5 rows)
```
이 쿼리에서 선택 목록은 2개의 집계 표현식으로 구성됩니다. 첫 번째 표현식은 SUM 함수를 사용하고 두 번째 표현식은 COUNT 함수를 사용합니다. 나머지 두 개의 열 LISTID 및 EVENTID를 그룹화 열로 선언해야 합니다.  
GROUP BY 절에서 표현식은 서수를 사용하여 선택 목록을 참조할 수도 있습니다. 예를 들어, 이전 예는 다음과 같이 줄일 수도 있습니다.  

```
select listid, eventid, sum(pricepaid) as revenue,
count(qtysold) as numtix
from sales
group by 1,2
order by 3, 4, 2, 1
limit 5;

listid | eventid | revenue | numtix
-------+---------+---------+--------
89397  |      47 |   20.00 |      1
106590 |      76 |   20.00 |      1
124683 |     393 |   20.00 |      1
103037 |     403 |   20.00 |      1
147685 |     429 |   20.00 |      1
(5 rows)
```

ALL  
ALL은 집계된 열을 제외하고 SELECT 목록에 지정된 모든 열을 기준으로 그룹화함을 나타냅니다. 예를 들어 GROUP BY 절에서 개별적으로 지정할 필요 없이 `col1` 및 `col2`를 기준으로 그룹화하는 다음 쿼리를 생각해 보겠습니다. `col3` 열은 `SUM` 함수의 인수이므로 그룹화되지 않습니다.  

```
SELECT col1, col2 sum(col3) FROM testtable GROUP BY ALL
```
SELECT 목록에서 열을 제외하면 GROUP BY ALL 절은 해당 특정 열을 기반으로 결과를 그룹화하지 않습니다.  

```
SELECT * EXCLUDE col3 FROM testtable GROUP BY ALL
```

 * *aggregation\_extension* *   
집계 확장 GROUPING SETS, ROLLUP 및 CUBE를 사용하여 단일 문에서 여러 GROUP BY 작업을 수행할 수 있습니다. 집계 확장 및 관련 기능에 대한 자세한 내용은 [집계 확장](r_GROUP_BY_aggregation-extensions.md)을 참조하세요.

## 예제
<a name="r_GROUP_BY_clause-examples"></a>

다음 예에서는 salesid, listid, sellerid, buyerid, eventid, dateid, qtysold, pricepaid, commission, saletime 열이 포함된 SALES 테이블을 사용합니다. SALES 테이블에 대한 자세한 내용은 [샘플 데이터베이스](c_sampledb.md) 섹션을 참조하세요.

다음 예시 쿼리는 GROUP BY 절에서 개별적으로 지정할 필요 없이 `salesid` 및 `listid`를 기준으로 그룹화합니다. `qtysold` 열은 `SUM` 함수의 인수이므로 그룹화되지 않습니다.

```
SELECT salesid, listid, sum(qtysold) FROM sales GROUP BY ALL;

salesid | listid  | sum
--------+---------+------
33095   | 36572   | 2	
88268   | 100813  | 4	
110917  | 127048  | 1	
...
```

다음 예시 쿼리는 SELECT 목록에서 여러 열을 제외하므로 GROUP BY ALL은 salesid와 listid만 그룹화합니다.

```
SELECT * EXCLUDE sellerid, buyerid, eventid, dateid, qtysold, pricepaid, commission, saletime 
FROM sales GROUP BY ALL;

salesid | listid 
--------+---------
33095   | 36572   	
88268   | 100813 	
110917  | 127048 	
...
```