簡體   English   中英

計算 postgresql 數組的每個元素的中值

[英]Calculate median for each element of a postgresql array

我有一個 postgresql 表“樣本”,其中包含一個由 200 個整數組成的數組的“強度”列。 我想為數組的每個元素計算一堆樣本的中值,例如強度的中值[1],強度的中值[2],...,強度的中值[200]。 如果該列由單個 integer 組成,那么使用 percentile_disc function 將很容易:

select percentile_disc(0.5) within group (order by intensity) from samples where...

但是,由於我的列由一個數組組成,所以這不起作用。 運行代碼給出了強度 [1] 的正確答案,但所有其他值都是錯誤的(我懷疑代碼只是從具有強度 [1] 中值的樣本中提取了全部 200 個整數)。

我可能可以使用“for”循環來獲取數據,但必須有一個更優雅的解決方案,使用 unnest 或類似的東西......

您需要取消嵌套數組並跟蹤每個元素。 那將是這樣的:

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;

如果您願意,可以將其重新聚合到一個數組中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM