イゴールの断片を別の形に置く:
select id, array300, (
select array_agg(z) from
(
select avg(x) from
(
select x, ntile(array_length(array300,1)/3) over() from unnest(array300) x
) y
group by ntile
) z
) array100
from your_table
このような小さな例のテーブルの場合
id | array300
----+-----------------------
1 | {110,25,53,110,25,53}
2 | {56,75,59,110,25,53}
3 | {65,93,82,110,25,53}
4 | {75,70,80,110,25,53}
結果は次のとおりです。
id | array300 | array100
----+-----------------------+-----------------------------------------------
1 | {110,25,53,110,25,53} | {(62.6666666666666667),(62.6666666666666667)}
2 | {56,75,59,110,25,53} | {(63.3333333333333333),(62.6666666666666667)}
3 | {65,93,82,110,25,53} | {(80.0000000000000000),(62.6666666666666667)}
4 | {75,70,80,110,25,53} | {(75.0000000000000000),(62.6666666666666667)}
(4 rows)
編集私の最初のバージョンは修正を使用しましたntile(2)
。これは、サイズ6のソース配列でのみ機能しましたarray_length(array300,1)/3
。代わりにを使用して修正しました。