SELECT 清單 - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

SELECT 清單

SELECT 清單會指出您要查詢傳回的資料欄、函數及表達式的名稱。清單查詢的輸出。

如需 SQL 函數的相關資訊,請參閱 SQL 函數參考。如需運算式的相關資訊,請參閱條件式運算式

語法

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

參數

TOP number

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

ALL

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

DISTINCT

此選項會根據一個或多個資料欄中相符的值,從結果集中消除重複的資料列。

注意

如果您的應用程式允許無效的外部索引鍵或主索引鍵,可能會導致查詢傳回不正確的結果。例如,如果主索引鍵資料行不包含所有唯一值,則 SELECT DISTINCT 查詢可能會傳回重複的資料列。如需詳細資訊,請參閱定義表格條件約束

* (星號)

傳回資料表的整個內容 (所有資料欄和所有資料列)。

運算式

表達式是由查詢所參考資料表中的一個或多個資料欄構成。表達式可包含 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' 的資料欄,目標清單中第二個表達式內的 'probability' 會參考該資料欄,而不是 'probability' 這個別名。

使用須知

TOP 是 SQL 延伸模組;它提供了 LIMIT 行為的替代方式。您無法在相同查詢中同時使用 TOP 和 LIMIT。

範例

下列範例會從 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)