我有一个4列的订单表。有三个重要的栏目-
已订购日期
orderstatus-要么“completed”要么“returned”
订单-输入的订单数
我想找出每个月已完成订单的总和,然后减去每月剩余订单的退货总额。到目前为止这是我的代码:

SELECT date_trunc('month', dateordered), SUM(orders) - (
    SELECT SUM(orders)
    FROM c_orders
    WHERE orderstatus = 'returned'
)
FROM c_orders
WHERE orderstatus = 'complete'
GROUP BY 1

我知道查询的主体工作正常,可以按月提取完成的订单。问题是子查询-我不知道如何指定按月返回订单的总和。所以现在这个查询是减去整个数据集中所有返回订单的总和,而不指定月份。
有更好的办法吗?短暂性脑缺血发作

最佳答案

我想这就是你想要的:

SELECT date_trunc('month', dateordered) as yyyymm,
       SUM(CASE WHEN orderstatus = 'complete' THEN orders
                WHEN orderstatus = 'returned' THEN - orders
                ELSE 0
           END)
FROM c_orders
GROUP BY yyyymm
ORDER BY yyyymm;

10-08 00:34