首页 > 解决方案 > 如何旋转我的表格以显示两个单独的列

问题描述

(我的数据库向我显示了每个人以及他们有多少支出以及他们在哪个阶段拥有它 - 仅供参考,并非每个人都有所有 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

结果是我看到了每次支付的平均值(耶)但是现在我想要 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   | 
|------------------|---------------|

ETC

标签: postgresqlpivotmetabase

解决方案


如果您只有这 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

这不是最好看的解决方案,但它确实有效。


推荐阅读