(我的数据库显示了每个人以及他们有多少支出,以及他们在哪个阶段有支出-仅供参考。我不是每个人都有4个支出)
我创建了一个表,其中包含不同阶段的平均值,分别称为payout1、payout 2、payout 3和payout 4。
每个阶段都有一个支出金额,并且有多个人获得不同的支出金额。
我现在有一个问题来透视这个表,以便我可以有2列与支出阶段和平均值。我需要它,这样我就可以在元数据库中使用它作为条形图可视化。
我已经有了一个可以很容易地显示平均值的舞台(见下文)。
select
round(avg(payout_1)::numeric,2) as avg_payout_1,
round(avg(payout_2)::numeric,2) as avg_payout_2,
round(avg(payout_3)::numeric,2) as avg_payout_3,
round(avg(payout_4)::numeric,2) as avg_payout_4
from payout_table结果是我看到了每个支出的平均值(yay),但是现在我想要有2列,1表示支出类型,2.平均支出金额
这是我的结果:
|------------------|---------------|---------------|---------------|
| avg_payout_1 | avg_payout_2 | avg_payout_3 | avg_payout_4 |
|------------------|---------------|---------------|---------------|
| 34.32 | 145.11 | 78.65 | 96.76 |
|------------------|---------------|---------------|---------------|我希望它能显示:
|------------------|---------------|
| payout | avg |
|------------------|---------------|
| payout_1 | 34.32 |
|------------------|---------------|
| payout_2 | 145.11 |
|------------------|---------------|等
发布于 2019-09-25 20:05:43
使用unnest()
select
unnest(array[
'payout_1',
'payout_2',
'payout_3',
'payout_4']) as payout,
unnest(array[
round(avg(payout_1)::numeric,2),
round(avg(payout_2)::numeric,2),
round(avg(payout_3)::numeric,2),
round(avg(payout_4)::numeric,2)]) as avg
from payout_table或jsonb
select key as payout, value::numeric as avg
from (
select
round(avg(payout_1)::numeric,2) as payout_1,
round(avg(payout_2)::numeric,2) as payout_2,
round(avg(payout_3)::numeric,2) as payout_3,
round(avg(payout_4)::numeric,2) as payout_4
from payout_table
) s
cross join jsonb_each(to_jsonb(s))发布于 2019-09-25 19:58:27
如果只有这4列,则可以将这些值组成一个数组,然后将它们拆分成行,如下所示:
select
unnest(array [a1,a2,a3,a4]),
unnest(array ['avg_payout_1','avg_payout_2','avg_payout_3','avg_payout_4'])
from(
select
round(avg(payout_1)::numeric,2) a1,
round(avg(payout_2)::numeric,2) a2,
round(avg(payout_3)::numeric,2) a3,
round(avg(payout_4)::numeric,2) a4
from payout_table) a这看起来不是最好的解决方案,但它是有效的。
https://stackoverflow.com/questions/58097000
复制相似问题