簡體   English   中英

當我將第二個表加入第一個表時的總和不正確

[英]Incorrect sum of when I join a second table to first table

我有兩張桌子:

  1. 訂單(id,site,orderdate,shipping_fees,amazone_fees,totalAmount,profit_loss,processing_fees)
  2. orderItemDetails (id,orderId,product_name,product_expense)

在此處輸入圖像描述

我寫了這個查詢來獲取數據,但我沒有得到我想要的數據。 所以請更正我的查詢,以便我獲得上圖中的數據。

SELECT 
    o.totalshippingfees,
    o.totalamazonefees,
    o.totalorderamount,
    o.totalprofitloss,
    o.totalprocessing_fees,
    oi.totalproductexpense,
    o.site
FROM (
    SELECT 
        orderdate,
        site,
        sum(orders.shipping_fees) as totalshippingfees,
        sum(orders.amazone_fees) as totalamazonefees,
        sum(orders.totalAmount) as totalorderamount,
        sum(orders.profit_loss) as totalprofitloss,
        sum(orders.processing_fees) as totalprocessing_fees
    FROM orders
    group by site
) as o
JOIN (
    SELECT 
        site,
        sum(orderItemDetails.product_expense) as totalproductexpense,
        sum(orders.shipping_fees) as totalshippingfees,
        sum(orders.amazone_fees) as totalamazonefees,
        sum(orders.totalAmount) as totalorderamount,
        sum(orders.profit_loss) as totalprofitloss,
        sum(orders.processing_fees) as totalprocessing_fees
    from orders 
    LEFT JOIN orderItemDetails ON orders.id = orderItemDetails.orderId 
    group by site
) as oi
WHERE MONTH(o.orderdate) = '".$monthNo."' AND YEAR(o.orderdate)= '".$monthyear[1]."'

如果我對您的理解正確,您可以在orderItemDetails上使用簡單的 group by site並在orders上使用 group by site並在site上加入它們。

select *
from (
    select 
      sum(shipping_fees) as totalshippingfees,
      sum(amazone_fees) as totalamazonefees,
      sum(totalAmount) as totalorderamount,
      sum(profit_loss) as totalprofitloss,
      sum(processing_fees) as totalprocessing_fees,
      site
    from orders 
    group by site
 ) d1
 join (
        select
            sum(product_expense) as totalproductexpense,
            site
        from orders o
        left join orderItemDetails od
        on o.id = od.orderId 
        group by site
      ) d2
on d1.site = d2.site

DB小提琴: https://www.db-fiddle.com/f/dkpctq1XrzB7bfsrojaZHd/2

更新:

您可以為日期過濾添加where條件,如下所示:

select *
from (
    select 
      sum(shipping_fees) as totalshippingfees,
      sum(amazone_fees) as totalamazonefees,
      sum(totalAmount) as totalorderamount,
      sum(profit_loss) as totalprofitloss,
      sum(processing_fees) as totalprocessing_fees,
      site
    from orders 
    where MONTH(orderdate) = 10 AND YEAR(orderdate) = 2019
    group by site
 ) d1
 join (
        select
            sum(product_expense) as totalproductexpense,
            site
        from orders o
        left join orderItemDetails od
        on o.id = od.orderId 
        where MONTH(o.orderdate) = 10 AND YEAR(o.orderdate) = 2019
        group by o.site
      ) d2
    on d1.site = d2.site

DB小提琴: https://www.db-fiddle.com/f/kgZbS5U1oSgPAGX34URD22/0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM