SQL - 对具有公共 ID 的列求和,然后将总计与另一列合并
SQL - sum a column with common id, then coalesce total with another column
我知道有人可以告诉我我做错了什么。
这是一个 postgresql 数据库。我试图首先对共享相同 ID 的列中的值求和,然后将该总数与另一列相加(合并)。
首先,这就是我对共享一个公共 order.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, 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
如果您使用示例 table 生成 sql fiddle 我们可以尝试结果
我知道有人可以告诉我我做错了什么。 这是一个 postgresql 数据库。我试图首先对共享相同 ID 的列中的值求和,然后将该总数与另一列相加(合并)。
首先,这就是我对共享一个公共 order.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, 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
如果您使用示例 table 生成 sql fiddle 我们可以尝试结果