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

MEDIAN 関数

値の範囲の中央値を計算します。範囲の Null 値は無視されます。

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

MEDIAN は PERCENTILE_CONT(.5) の特殊なケースです。

構文

Copy
MEDIAN ( median_expression )

引数

median_expression

関数の対象となる列または式。

データ型

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

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

使用に関する注意事項

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

ステートメントにソートベースの集計関数 (LISTAGG、PERCENTILE_CONT、または MEDIAN) に対する複数の呼び出しが含まれる場合、すべて同じ ORDER BY 値を使用する必要があります。MEDIAN では、式の値による暗黙的な順序が適用されることに注意してください。

たとえば、次のステートメントはエラーを返します。

Copy
select top 10 salesid, sum(pricepaid), percentile_cont(0.6) within group (order by salesid), median (pricepaid) from sales group by salesid, pricepaid; An error occurred when executing the SQL command: select top 10 salesid, sum(pricepaid), percentile_cont(0.6) within group (order by salesid), median (pricepaid) from sales group by salesid, pricepai... ERROR: within group ORDER BY clauses for aggregate functions must be the same

以下のステートメントは正常に実行されます。

Copy
select top 10 salesid, sum(pricepaid), percentile_cont(0.6) within group (order by salesid), median (salesid) from sales group by salesid, pricepaid;

以下は、MEDIAN が PERCENTILE_CONT(0.5) と同じ結果を生成する例です。

Copy
select top 10 distinct sellerid, qtysold, percentile_cont(0.5) within group (order by qtysold), median (qtysold) from sales group by sellerid, qtysold; sellerid | qtysold | percentile_cont | median ---------+---------+-----------------+------- 1 | 1 | 1.0 | 1.0 2 | 3 | 3.0 | 3.0 5 | 2 | 2.0 | 2.0 9 | 4 | 4.0 | 4.0 12 | 1 | 1.0 | 1.0 16 | 1 | 1.0 | 1.0 19 | 2 | 2.0 | 2.0 19 | 3 | 3.0 | 3.0 22 | 2 | 2.0 | 2.0 25 | 2 | 2.0 | 2.0