

 Amazon Redshift 將不再支援從修補程式 198 開始建立新的 Python UDFs。現有 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)
+ [Parameters](#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 ] [, ...]
```

## Parameters
<a name="r_SELECT_list-parameters"></a>

TOP *number*   
TOP 會採用正整數做為其引數，此引數定義傳回至用戶端的資料列數。TOP 子句的行為與 LIMIT 子句的行為相同。傳回的資料列數是固定的，但資料列集卻不是。若要傳回一致的資料列集，請搭配 ORDER BY 子句使用 TOP 或 LIMIT。

ALL   
您未指定 DISTINCT 時，用來定義預設行為的備援關鍵字。`SELECT ALL *` 的意義與 `SELECT *` 相同 (選取所有資料欄的所有資料列並保留重複項目)。

DISTINCT   
此選項會根據一個或多個資料欄中相符的值，從結果集中消除重複的資料列。  
如果您的應用程式允許無效的外部索引鍵或主索引鍵，則可能造成查詢傳回不正確的結果。例如，如果主索引鍵欄並非包含全部是唯一的值，則 SELECT DISTINCT 查詢可能傳回重複的列。如需詳細資訊，請參閱[定義資料表限制條件](https://docs.aws.amazon.com/redshift/latest/dg/t_Defining_constraints.html)。

\$1 (星號)   
傳回資料表的整個內容 (所有資料欄和所有資料列)。

 *表達式*   
表達式是由查詢所參考資料表中的一個或多個資料欄構成。表達式可包含 SQL 函數。例如：  

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

AS *column\$1alias*   
資料欄的暫時名稱，會在最終結果集中使用。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\$1data 資料表中有名為 'probability' 的資料欄，目標清單中第二個表達式內的 '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;
```

下列查詢具同等功能，但使用 LIMIT 子句而非 TOP 子句：

```
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 資料表傳回前兩個 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)
```

