根据另一个列中的值计算和汇总列(SQL)

时间:2019-08-15 21:30:28

标签: sql postgresql

我有一张由股票交易组成的表格。我需要计算每个交易员(这里是一个例子,交易员“本”)赚取的利润。

trader   position   quantity   tradeprice   marketprice
Ben      long          1          100          150
Ben      short        -1          105          150

诀窍是,多头头寸为正数,而空头头寸为负数,因此根据交易情况,需要对计算利润进行些微修改。

逻辑如下:

多头头寸的利润为50(以100的价格购买,以150的价格出售给市场)。

空头头寸的获利为-45(以105的价格卖给市场,以150的价格从市场买进)

总利润= 5

电子表格方式:

-1*(quantity*tradeprice) + marketprice = 50 / Long position profit

-1*(quantity*tradeprice) - marketprice = -45 / Short position profit

我需要为每个交易者添加另外一列Profit

非常感谢,

1 个答案:

答案 0 :(得分:1)

这只是条件聚合。当您描述问题时:

select trader,
       sum(case when position = 'long' then (market_price - trade_price) * quantity
                when position = 'short' then (market_price - trade_price) * (- quantity)
           end)
from t
group by trader;

但是,您的样本数据表明:

select trader, sum( (market_price - trade_price) * quantity)
from t
group by trader;