本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
MEDIAN 視窗函數
計算視窗或分割區中值範圍的中位數值。範圍中的NULL值會被忽略。
MEDIAN 是反向分發函數,假定連續的分發模型。
MEDIAN 是僅限運算節點的函數。如果查詢未參考使用者定義的資料表或 AWS Clean Rooms 系統資料表,則函數會傳回錯誤。
語法
MEDIAN ( median_expression ) OVER ( [ PARTITION BY partition_expression ] )
引數
- median_expression
-
此表達式 (例如欄名) 提供要決定中位數的值。表達式必須為數值或日期時間資料類型,或可隱含地轉換為這種資料類型。
- OVER
-
用於指定視窗分割的子句。OVER 子句不能包含視窗順序或視窗框架規格。
- PARTITION BY partition_expression
-
選用。一種表達式,可設定子OVER句中每個群組的記錄範圍。
資料類型
傳回類型取決於 median_expression 的資料類型。下表顯示每一個 median_expression 資料類型的傳回類型。
輸入類型 | 傳回類型 |
---|---|
NUMERIC, DECIMAL | DECIMAL |
FLOAT, DOUBLE | DOUBLE |
DATE | DATE |
使用須知
如果 median_expression 引數是定義的最高精確度為 38 位數的DECIMAL資料類型,則 MEDIAN可能會傳回不正確的結果或錯誤。如果MEDIAN函數的傳回值超過 38 位數,則結果會截斷以符合,這會導致精確度損失。在插補期間,如果中間結果超過最大精確度,則會發生數值溢位,且函數會傳回錯誤。為了避免這些情況,建議使用精確度較低的資料類型,或將 median_expression 引數轉換為較低精確度。
例如,具有DECIMAL引數的 SUM函數會傳回預設精確度 38 位數。結果的小數位數和引數的小數位數相同。因此,例如, DECIMAL(5,2) 資料欄SUM的 會傳回 DECIMAL(38,2) 資料類型。
下列範例使用SUM函數的 median_expression 引數中的MEDIAN函數。資料PRICEPAID欄的資料類型為 DECIMAL(8,2),因此SUM函數會傳回 DECIMAL(38,2)。
select salesid, sum(pricepaid), median(sum(pricepaid)) over() from sales where salesid < 10 group by salesid;
為了避免可能的精確度損失或溢出錯誤,請將結果轉換為精確度較低的DECIMAL資料類型,如下列範例所示。
select salesid, sum(pricepaid), median(sum(pricepaid)::decimal(30,2)) over() from sales where salesid < 10 group by salesid;
範例
以下範例計算每一個賣方的銷售數量中位數:
select sellerid, qty, median(qty) over (partition by sellerid) from winsales order by sellerid; sellerid qty median --------------------------- 1 10 10.0 1 10 10.0 1 30 10.0 2 20 20.0 2 20 20.0 3 10 17.5 3 15 17.5 3 20 17.5 3 30 17.5 4 10 25.0 4 40 25.0
如需 WINSALES 資料表的描述,請參閱範圍函數範例的範例資料表。