私は通常、私は十分に近いの答えを探していた場合に二つのグループにデータを分割するNTILE関数を使用します。しかし、正確な中央値(たとえば、偶数行の中点)が必要な場合は、AWS Redshift Discussion Forumで提案されている手法を使用します。
この手法では、昇順と降順の両方で行が順序付けされ、奇数個の行がある場合は、真ん中の行(つまりrow_num_asc = row_num_desc)の平均値が返されます。自体。
CREATE TABLE temp (num SMALLINT);
INSERT INTO temp VALUES (1),(5),(10),(2),(4);
SELECT
AVG(num) AS median
FROM
(SELECT
num,
SUM(1) OVER (ORDER BY num ASC) AS row_num_asc,
SUM(1) OVER (ORDER BY num DESC) AS row_num_desc
FROM
temp) AS ordered
WHERE
row_num_asc IN (row_num_desc, row_num_desc - 1, row_num_desc + 1);
median
--------
4
偶数の行がある場合は、2つの中間行の平均を返します。
INSERT INTO temp VALUES (9);
SELECT
AVG(num) AS median
FROM
(SELECT
num,
SUM(1) OVER (ORDER BY num ASC) AS row_num_asc,
SUM(1) OVER (ORDER BY num DESC) AS row_num_desc
FROM
temp) AS ordered
WHERE
row_num_asc IN (row_num_desc, row_num_desc - 1, row_num_desc + 1);
median
--------
4.5
より良い回答リンク – Keith
テーブルからの異なるメジアン(フィールド)の選択() –