首页 > 解决方案 > SQLite3根据列创建两次合并行的视图利润

问题描述

给定一张桌子

symbol|action|quantity|price
foo|buy|1|-10.00
foo|sell|1|10.50
bar|buy|1|-50.00
bar|sell|1|50.50

我正在尝试创建一个显示每个符号利润的视图

我已经尝试了以下几种变体,有多个“order by”,但没有得到预期的输出

create view if not exists profit_view as select symbol,sum(price * quanity) as profit from trans group by symbol;

我想要的是一个显示或接近的视图

symbol|profit|percent
foo|.50|5

标签: sqlite

解决方案


假设每个品种只有一个买卖记录,我们可以尝试:

SELECT
    symbol,
    SUM(quantity*price) AS profit,
    100.0 * SUM(quantity*price) /
        ABS(MAX(CASE WHEN action = 'buy' THEN quantity*price END)) AS percent
FROM trans
GROUP BY
    symbol;

推荐阅读