首页 > 解决方案 > PostgreSQL:根据其他列的总和结果创建生成列的最佳方法

问题描述

我是 PostgreSQL 的新手,所以这个问题对于有经验的人来说可能是基本的。

我创建了一个测试数据库,其中包含一个名为的表Activity,如下所示:

Manufacturer     Region       Model         Orders     Sales   
BMW              Americas     3 Series      58390      47092
BMW              Americas     4 Series      31938      28474
BMW              Americas     5 Series      13730      10837
BMW              Americas     7 Series       9372       6493
Audi             Europe       A3            60483      50381
Audi             Europe       A4            49302      39303
Audi             Europe       A5            50319      49001
Audi             Europe       A6             9101       4688

我想创建一个名为“生成”并存储的列OrdersToTradesRatio(这是订单与销售的比率,按 region 求和)。

使用上面的数据,OrdersToSales将是:

OrdersToSales
1.22104         <----- Mercedes --- (58390 + 31938 + 13730 + 9372) / (47092 + 28474 + 10837 + 6493)
1.18017         <----- Audi ------- (60483 + 49302 + 50319 + 9101) / (50381 + 39303 + 49001 + 4688)

结合计算OrdersToSales列,该表可能如下所示:

Manufacturer     Region       Model         Orders     Sales     OrdersToSales  
BMW              Americas     3 Series      58390      47092      <null>
BMW              Americas     4 Series      31938      28474      <null>
BMW              Americas     5 Series      13730      10837      <null>
BMW              Americas     7 Series       9372       6493      <null>
BMW              Americas     <null>        <null>     <null>    1.22104
Audi             Europe       A3            60483      50381      <null>
Audi             Europe       A4            49302      39303      <null>
Audi             Europe       A5            50319      49001      <null>
Audi             Europe       A6             9101       4688      <null>
Audi             Europe       <null>        <null>     <null>    1.18017

OrdersToSales是否可以如上所示创建此列?

提前致谢!

标签: postgresql

解决方案


尝试这个:

select "Manufacturer","Region","Model","Orders","Sales", null as "OrdersToSales" from "Activity"

union all

select "Manufacturer", "Region", null,null,null, round(sum("Orders")/sum("Sales"),5) 
from "Activity" 
group by "Manufacturer", "Region"

order by "Manufacturer","Region","Model", "OrdersToSales" desc

演示

ROLLUP 如果符合您的要求,您应该尝试一下


推荐阅读