メニュー
Amazon Redshift
データベース開発者ガイド (API Version 2012年12月1日)

MEDIAN ウィンドウ関数

ウィンドウまたはパーティションの値の範囲について、その中央値を計算します。範囲の Null 値は無視されます。

MEDIAN は、連続型分散モデルを前提とする逆分散関数です。

構文

Copy
MEDIAN ( median_expression ) OVER ( [ PARTITION BY partition_expression ] )

引数

median_expression

中央値を特定する値を提供する式 (列名など)。式は、数値または日時データ型を含んでいるか、それらのデータ型に暗黙的に変換できる必要があります。

OVER

ウィンドウのパーティションを指定する句。OVER 句にウィンドウの並び順またはウィンドウフレーム仕様を含めることはできません。

PARTITION BY partition_expression

オプション。OVER 句の各グループのレコードの範囲を設定する式。

データ型

戻り値の型は、データ型 median_expression によって決まります。次の表は、各 median_expression 式のデータ型に対応する戻り型を示しています。

入力の型 戻り型
INT2、INT4、INT8、NUMERIC、DECIMAL DECIMAL
FLOAT、DOUBLE DOUBLE
DATE DATE

使用に関する注意事項

median_expression 引数が DECIMAL データ型であり、その最大精度が 38 桁である場合、MEDIAN が不正確な結果またはエラーを返す可能性があります。MEDIAN 関数の戻り値が 38 桁を超える場合、結果は 38 桁までとなり、39 桁以降は切り捨てられるため、精度が失われます。補間中に中間結果が最大精度を超えた場合には、数値オーバーフローが発生し、この関数はエラーを返します。このような状態を回避するため、精度が低いデータ型を使用するか、median_expression 引数を低い精度にキャストすることをお勧めします。

たとえば、DECIMAL 引数の SUM 関数のデフォルトの 38 桁の精度を返します。結果のスケールは、引数のスケールと同じです。したがって、たとえば、DECIMAL(5,2) 列の SUM は DECIMAL(38,2) データ型を返します。

次の例では、MEDIAN 関数の median_expression 引数で SUM 関数を使用します。PRICEPAID 列のデータ型は DECIMAL(8,2) であるため、SUM 関数は DECIMAL(38,2) を返します。

Copy
select salesid, sum(pricepaid), median(sum(pricepaid)) over() from sales where salesid < 10 group by salesid;

精度の損失またはオーバーフローエラーを回避するには、次の例が示すように、精度が低い DECIMAL データ型に結果をキャストします。

Copy
select salesid, sum(pricepaid), median(sum(pricepaid)::decimal(30,2)) over() from sales where salesid < 10 group by salesid;

MEDIAN ウィンドウ関数の例」を参照してください。