

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

# SELECT リスト
<a name="r_SELECT_list"></a>

**Topics**
+ [構文](#r_SELECT_list-synopsis)
+ [パラメータ](#r_SELECT_list-parameters)
+ [使用に関する注意事項](#r_SELECT_list_usage_notes)
+ [例](#r_SELECT_list-examples)

SELECT リストは、クエリが返す列、機能、および式を指定します。このリストは、クエリの出力を表しています。

SQL 関数の詳細については、「[SQL 関数リファレンス](c_SQL_functions.md)」を参照してください。式の詳細については、「[条件式](c_conditional_expressions.md)」を参照してください。

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

```
SELECT
[ TOP number ]
[ ALL | DISTINCT ] * | expression [ AS column_alias ] [, ...]
```

## パラメータ
<a name="r_SELECT_list-parameters"></a>

TOP *number*   
TOP は引数として正の整数を取り、クライアントに返される行数を定義します。TOP 句に関する動作は、LIMIT 句に関する動作と同じです。返される行の数は固定されていますが、行のセットは固定されていません。一貫した行のセットを返すには、TOP または LIMIT を ORDER BY 句と組み合わせて使用します。

ALL   
DISTINCT を指定しない場合、デフォルトの動作を定義する冗長キーワード。`SELECT ALL *` は、`SELECT *`と同じ意味です (すべての列のすべての行を選択し、重複を維持します)。

DISTINCT   
1 つまたは複数の列の一致する値に基づいて、結果セットから重複する行を削除するオプション。  
アプリケーションが無効な外部キーまたはプライマリキーを許可する場合、クエリが不正な結果を返す可能性があります。例えば、プライマリキー列に含まれるすべての値が一意でない場合、SELECT DISTINCT クエリが重複した行を返すことがあります。詳細については、「[テーブル制約の定義](https://docs.aws.amazon.com/redshift/latest/dg/t_Defining_constraints.html)」を参照してください。

\* (アスタリスク)   
テーブルのコンテンツ全体を返します (すべての列とすべての行)。

 *expression*   
クエリによって参照されるテーブル内に存在する 1 つまたは複数の列から構成される式。式には、SQL 関数を含めることができます。次に例を示します。  

```
avg(datediff(day, listtime, saletime))
```

AS *column\_alias*   
最終的な結果セットに使われる列のテンポラリ名。AS キーワードはオプションです。次に例を示します。  

```
avg(datediff(day, listtime, saletime)) as avgwait
```
シンプルな列名ではない式に対して、エイリアスを指定しない場合、結果セットはその列に対してデフォルト名を適用します。  
エイリアスは、ターゲットリストで定義された直後に認識されます。同じターゲットリストで、その後に定義されている他の式でエイリアスを使用できます。以下に示しているのはこのポリシーの例です。  

```
select clicks / impressions as probability, round(100 * probability, 1) as percentage from raw_data;
```
エイリアスの側面参照の利点は、同じターゲットリストでより複雑な式を構築するときに、エイリアスの式を繰り返す必要がないことです。Amazon Redshift がこの種類の参照を解析するときは、前に定義されたエイリアスをインライン展開します。`FROM` 句に定義された名前が、以前にエイリアスを作成した式と同じである列がある場合、`FROM`句の列が優先されます。例えば、上記のクエリで、テーブルの raw\_data に「probability」という名前の列がある場合、ターゲットリストの 2 番目の式の「probability」は、エイリアス名「probability」ではなく列を参照します。

## 使用に関する注意事項
<a name="r_SELECT_list_usage_notes"></a>

TOP は SQL 式です。LIMIT 動作に対する選択肢を提供します。TOP と LIMIT を同じクエリで使用することはできません。

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

次の例では、SALES テーブルから 10 行を返します。クエリは TOP 句を使用していますが、ORDER BY 句が指定されていないため、予想できない行セットが返されます。

```
select top 10 *
from sales;
```

次のクエリは機能的には同じですが、TOP 句の代わりに LIMIT 句を使用します。

```
select *
from sales
limit 10;
```

次の例では、TOP 句を使用して、SALES テーブルから最初の 10 行を QTYSOLD 列の降順にソートして返します。

```
select top 10 qtysold, sellerid
from sales
order by qtysold desc, sellerid;

qtysold | sellerid
--------+----------
8 |      518
8 |      520
8 |      574
8 |      718
8 |      868
8 |     2663
8 |     3396
8 |     3726
8 |     5250
8 |     6216
(10 rows)
```

次の例では、SALES テーブルから、最初の 2 つの QTYSOLD 値と SELLERID 値を、QTYSOLD 列をソートして返します。

```
select top 2 qtysold, sellerid
from sales
order by qtysold desc, sellerid;

qtysold | sellerid
--------+----------
8 |      518
8 |      520
(2 rows)
```

次の例は、CATEGORY テーブルからの異なるカテゴリグループのリストを示しています。

```
select distinct catgroup from category
order by 1;

catgroup
----------
Concerts
Shows
Sports
(3 rows)

--the same query, run without distinct
select catgroup from category
order by 1;

catgroup
----------
Concerts
Concerts
Concerts
Shows
Shows
Shows
Sports
Sports
Sports
Sports
Sports
(11 rows)
```

次の例では、2008 年 12 月の週の数の独自セットを返します。DISTINCT 句がないと、このステートメントは 31 行、つまりその月の各日に対して 1 行を返します。

```
select distinct week, month, year
from date
where month='DEC' and year=2008
order by 1, 2, 3;

week | month | year
-----+-------+------
49 | DEC   | 2008
50 | DEC   | 2008
51 | DEC   | 2008
52 | DEC   | 2008
53 | DEC   | 2008
(5 rows)
```

