如何在SQL中找到每一行的中位数

时间:2019-07-26 17:02:09

标签: sql

对于每一行,我想找到中位数。我有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    

1 个答案:

答案 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;