如下表所示,需要为mean
和{{1}计算每行median
和val1
至val4
的{{1}}和val_mean
} 分别。
val_median
一般来说,我们如何处理跨列的聚合?
一种方法可以是将val1分解为val4到4个不同的行,然后通过id,loc聚合它们以找到平均值/中值。所以上面的表格首先需要转换成下面的格式 - 我怎么可能会这样做?
+----+------+------+------+------+------+
| id | loc | val1 | val2 | val3 | val4 |
+----+------+------+------+------+------+
| 1 | loc1 | 10 | 190 | null | 20 |
| 2 | loc2 | 20 | null | 10 | 10 |
+----+------+------+------+------+------+
答案 0 :(得分:1)
select id, loc, avg(val), percentile_disc(0.5) within group (order by val)
from (
select id, loc, val1 as val
from t
union all
select id, loc, val2
from t
union all
select id, loc, val3
from t
union all
select id, loc, val4
from t
) s
group by id, loc
;
id | loc | avg | percentile_disc
----+------+---------------------+-----------------
1 | loc1 | 73.3333333333333333 | 20
2 | loc2 | 13.3333333333333333 | 10