SQL-将一列与公共id求和,然后将总计与另一列合并

SQL-将一列与公共id求和,然后将总计与另一列合并,sql,postgresql,sum,coalesce,Sql,Postgresql,Sum,Coalesce,我知道有人能告诉我我在这里做错了什么。 这是一个postgresql数据库。我试图首先对共享同一ID的列中的值求和,然后将该总和与另一列合并 首先,这是我如何合计共享公共顺序的列中的值。id: ( SELECT SUM(order_item.purchase_price) from order_item where order_item.order_id = orders.id group by orders.id, order_item.id ) as &quo

我知道有人能告诉我我在这里做错了什么。 这是一个postgresql数据库。我试图首先对共享同一ID的列中的值求和,然后将该总和与另一列合并

首先,这是我如何合计共享公共顺序的列中的值。id:

(
SELECT
    SUM(order_item.purchase_price)
    from order_item
    where order_item.order_id = orders.id
    group by orders.id, order_item.id
) as "Food Total"
这就是我如何将两列的值相加的方法:

(
SELECT
    COALESCE(order_item.purchase_price,0) + COALESCE(order_item.iva_on_purchase_price,0)
    from order_item
    where order_item.order_id = orders.id
) as "Order Total",
那么,我应该如何将两者结合起来,首先找到共享一个公共order.id的所有值的总和,然后将该总和添加到另一列order\u item.iva\u on\u purchase\u price中

这是不对的吗

(
SELECT
    SUM(order_item.purchase_price) - COALESCE(order_item.iva_on_purchase_price,0)
    from order_item
    where order_item.order_id = orders.id
    group by orders.id, order_item.id
) as "Buyer Food Total Pre IVA",

这样做的正确方法是什么?

您可以创建两个CTE,一个用于第一个和,另一个用于第二个数据,然后可以加入两个CTE 请参见下面的示例代码

With Food_Total
As(
SELECT
    SUM(order_item.purchase_price) As SUM_PP, orders.id As ORDER_ID,  order_item.id As ORDER_ITEM_ID
    from order_item
    where order_item.order_id = orders.id
    group by orders.id, order_item.id
),
ORDER_TOTAL
As
(
   SELECT
    COALESCE(order_item.iva_on_purchase_price,0) As PP, orders.id As ORDER_ID, order_id As ORDER_ITEM_ID
    from order_item
    where order_item.order_id = orders.id
)
Select (SUM_PP + PP) TOTAL_SUM,
        From Food_Total ft
        JOIN ORDER_TOTAL ot On ft.ORDER_ID = ot.ORDER_ID And ft.ORDER_ITEM_ID = ot.ORDER_ITEM_ID
若您使用示例表生成sql FIDLE,我们可以尝试结果