对于每一行,我想找到中位数。我有6列,想找到其中5列的中位数
我尝试使用percentile_cont,但是它不起作用,因为order by需要表中的一列(即使使用VALUES也不起作用)
id col1 col2 col3 col4 col5
1 7 5 4 8 10
需要成为
id col1 col2 col3 col4 col5 med
1 7 5 4 8 10 7
答案 0 :(得分:0)
如果值不同且不为null,则可以使用巨型case
表达式:
select t.*,
(case when ((case when col1 > col2 then 1 else 0 end) +
(case when col1 > col3 then 1 else 0 end) +
(case when col1 > col4 then 1 else 0 end) +
(case when col1 > col5 then 1 else 0 end)
) = 2
then col1
when ((case when col2 > col1 then 1 else 0 end) +
(case when col2 > col3 then 1 else 0 end) +
(case when col2 > col4 then 1 else 0 end) +
(case when col2 > col5 then 1 else 0 end)
) = 2
then col2
. . .
end) as median
from t;