SQL-对具有公共ID的列求和,然后与另一列合并总计

问题描述

我知道有人可以告诉我我在这里做错了什么。 这是一个Postgresql数据库。我正在尝试首先对共享相同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"

这是我将2列的值加在一起的方法

(
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_item.iva_on_purchase_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,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小提琴,我们可以尝试结果

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...