

 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 句は、クエリのグループ化列を特定します。これは、指定しているすべての列で同じ値を持つ行をグループ化するために使用されます。列が指定されている順序は関係ありません。結果として、共通の値を持つ行のセットがそれぞれ 1 つのグループ行に結合されます。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 リストの非集計式のリストと一致する必要があります。例えば、次のシンプルなクエリを考慮してみます。  

```
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 関数を使用し、2 番目の式は COUNT 関数を使用します。残りの 2 つの例 (LISTID と EVENTID) は、グループ化列として宣言する必要があります。  
GROUP BY 句の式は、序数を使用することで、SELECT リストを参照することもできます。例えば、前の例は、次のように短縮できます。  

```
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 は、SELECT リストで指定しているすべての列のうち、集計される列を除くものをグループ化することを示します。例えば、次のクエリを考えてみましょう。このクエリは、GROUP BY 句で個別に指定しなくても、`col1` と `col2` でグループ化します。`col3` 列は `SUM` 関数の引数であるため、グループ化されません。  

```
SELECT col1, col2 sum(col3) FROM testtable GROUP BY ALL
```
SELECT リストの列を EXCLUDE で除外した場合、GROUP BY ALL 句はその特定の列に基づいて結果をグループ化しません。  

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

 * *aggregation\_extension* *   
集計拡張機能 GROUPING SETS、ROLLUP、CUBE を使用すると、1 つのステートメントで複数の 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 	
...
```