PostgreSQL:基于其他列的汇总结果创建生成列的最佳方法
我是PostgreSQL的新手,所以这个问题对于有经验的人来说可能是最基本的 我使用名为Activity的表创建了一个测试数据库,如下所示:PostgreSQL:基于其他列的汇总结果创建生成列的最佳方法,postgresql,Postgresql,我是PostgreSQL的新手,所以这个问题对于有经验的人来说可能是最基本的 我使用名为Activity的表创建了一个测试数据库,如下所示: Manufacturer Region Model Orders Sales BMW Americas 3 Series 58390 47092 BMW Americas 4 Series 31938
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
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
我想创建一个名为OrdersToTradesRatio的生成和存储列,它是按地区汇总的订单与销售额的比率
使用上述数据,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列
提前谢谢 试试这个:
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
如果符合您的要求,您应该尝试汇总您的PostgreSql版本是什么?不要存储这样的列,如果修改其他行,该列将变得无效。这样的冗余是一个问题。计算SELECT上的值。@Akhilesh Mishra-我使用的是PostgreSQL 12.3版。@LaurenzAlbe完全同意。这应该是Select only的结果。不要将其存储在表中。@请尝试汇总分组。您将获得略有不同的输出,但它与您的情况相关。您应该在此处使用sum作为窗口函数,而不使用GROUP BY,然后您可以获得OP想要的输出。按原样运行@Akhilesh Mishra的代码,我会收到一条错误消息,说明:错误:关系活动不存在第1行:选择*,作为ordertosales from activity ^SQL state:42P01 Character:39活动空表名大写是否需要用双引号括起来和/或以public开头。?再一次,我对这一点是全新的,并且仍然习惯于语法!此外,列名是否需要大写?是的,如果您的表/架构/列名不是小写,则必须使用双引号,即活动