计算postgresql数组中每个元素的中值

计算postgresql数组中每个元素的中值,sql,arrays,postgresql,median,Sql,Arrays,Postgresql,Median,我有一个postgresql表“samples”,其中包含一列“intensity”,该列由200个整数组成。我想计算一组样本的中值,对于数组的每个元素,例如强度中值[1],强度中值[2],…,强度中值[200]。如果列由单个整数组成,那么使用percentile_disc函数将很容易: select percentile_disc(0.5) within group (order by intensity) from samples where... 但是,由于我的列由数组组成,因此这不起作

我有一个postgresql表“samples”,其中包含一列“intensity”,该列由200个整数组成。我想计算一组样本的中值,对于数组的每个元素,例如强度中值[1],强度中值[2],…,强度中值[200]。如果列由单个整数组成,那么使用percentile_disc函数将很容易:

select percentile_disc(0.5) within group (order by intensity) from samples where...
但是,由于我的列由数组组成,因此这不起作用。运行代码给出了强度[1]的正确答案,但所有其他值都是错误的(我怀疑代码只是从具有强度中值[1]的样本中提取了全部200个整数)


我可能会使用“for”循环来获取数据,但必须有一个更优雅的解决方案,使用unest或类似的东西…

您需要取消数组的est并跟踪每个元素。可能是这样的:

select n, percentile_cont(0.5) within group (order by el) as median
from samples s cross join lateral
     unnest(s.ar) with ordinality u(el, n)
group by n;

如果愿意,您可以将其重新聚合到一个数组中。

类似的内容如何?:
从(选择unest(数组[1,2,3,3,4,5])中选择组内的百分位数(0.5)(按i排序)作为一个数组;百分位盘-----------------3