

 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/)を参照してください。

# HAVING 句
<a name="r_HAVING_clause"></a>

HAVING 句は、クエリが返す中間グループ結果セットに条件を適用します。

## 構文
<a name="r_HAVING_clause-synopsis"></a>

```
[ HAVING condition ]
```

例えば、SUM 関数の結果を制限できます。

```
having sum(pricepaid) >10000
```

HAVING 条件は、すべての WHERE 句条件が適用され、GROUP BY オペレーションが完了してから適用されます。

条件自体は、WHERE 句の条件と同じ形式になります。

## 使用に関する注意事項
<a name="r_HAVING_clause_usage_notes"></a>
+ HAVING 句条件内で参照される列は、グループ化列または集計関数の結果を参照する列のいずれかでなければなりません。
+ HAVING 句では、以下の項目を指定することはできません。
  + SELECT リスト項目を参照する序数。序数が使用できるのは、GROUP BY 句または ORDER BY 句だけです。

## 例
<a name="r_HAVING_clause-examples"></a>

次のクエリは、すべてのイベントに対するチケットの合計販売を名前別に計算し、販売合計が 800,000 ドルに達しなかったイベントを削除します。HAVING 条件は、SELECT リスト内の集計関数の結果に適用されます。`sum(pricepaid)`)

```
select eventname, sum(pricepaid)
from sales join event on sales.eventid = event.eventid
group by 1
having sum(pricepaid) > 800000
order by 2 desc, 1;

eventname        |    sum
-----------------+-----------
Mamma Mia!       | 1135454.00
Spring Awakening |  972855.00
The Country Girl |  910563.00
Macbeth          |  862580.00
Jersey Boys      |  811877.00
Legally Blonde   |  804583.00
```

次のクエリは、同じような結果セットを計算します。ただしこの場合、SELECT リスト `sum(qtysold)` で指定されていない集計に対して HAVING 条件が適用されます。2,000 枚を超えるチケットを販売しなかったイベントは、最終結果から削除されます。

```
select eventname, sum(pricepaid)
from sales join event on sales.eventid = event.eventid
group by 1
having sum(qtysold) >2000
order by 2 desc, 1;

eventname        |    sum
-----------------+-----------
Mamma Mia!       | 1135454.00
Spring Awakening |  972855.00
The Country Girl |  910563.00
Macbeth          |  862580.00
Jersey Boys      |  811877.00
Legally Blonde   |  804583.00
Chicago          |  790993.00
Spamalot         |  714307.00
```

次のクエリは、すべてのイベントに対するチケットの合計販売を名前別に計算し、販売合計が 800,000 ドルに達しなかったイベントを削除します。HAVING 条件は、`sum(pricepaid)` の `pp` エイリアスを使用して SELECT リスト内の集計関数の結果に適用されます。

```
select eventname, sum(pricepaid) as pp
from sales join event on sales.eventid = event.eventid
group by 1
having pp > 800000
order by 2 desc, 1;

eventname        |    pp
-----------------+-----------
Mamma Mia!       | 1135454.00
Spring Awakening |  972855.00
The Country Girl |  910563.00
Macbeth          |  862580.00
Jersey Boys      |  811877.00
Legally Blonde   |  804583.00
```