首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何透视表以显示两个单独的列

如何透视表以显示两个单独的列
EN

Stack Overflow用户
提问于 2019-09-25 19:07:19
回答 2查看 454关注 0票数 1

(我的数据库显示了每个人以及他们有多少支出,以及他们在哪个阶段有支出-仅供参考。我不是每个人都有4个支出)

我创建了一个表,其中包含不同阶段的平均值,分别称为payout1、payout 2、payout 3和payout 4。

每个阶段都有一个支出金额,并且有多个人获得不同的支出金额。

我现在有一个问题来透视这个表,以便我可以有2列与支出阶段和平均值。我需要它,这样我就可以在元数据库中使用它作为条形图可视化。

我已经有了一个可以很容易地显示平均值的舞台(见下文)。

代码语言:javascript
复制
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.平均支出金额

这是我的结果:

代码语言:javascript
复制
|------------------|---------------|---------------|---------------|
|   avg_payout_1   |  avg_payout_2 |  avg_payout_3 |  avg_payout_4 |
|------------------|---------------|---------------|---------------|
|       34.32      |      145.11   |     78.65     |      96.76    |
|------------------|---------------|---------------|---------------|

我希望它能显示:

代码语言:javascript
复制
|------------------|---------------|
|      payout      |      avg      |  
|------------------|---------------|
|     payout_1     |      34.32    | 
|------------------|---------------|
|     payout_2     |      145.11   | 
|------------------|---------------|

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-25 20:05:43

使用unnest()

代码语言:javascript
复制
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

代码语言:javascript
复制
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))

Db<>fiddle

票数 0
EN

Stack Overflow用户

发布于 2019-09-25 19:58:27

如果只有这4列,则可以将这些值组成一个数组,然后将它们拆分成行,如下所示:

代码语言:javascript
复制
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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58097000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档