我将第二张桌子加入第一张桌子的总和不正确

问题描述 投票:-1回答:1

我有两个表:

  1. 订单(编号,地点,订购日期,运费,amazon_fees,总金额,利润损失,加工费)
  2. orderItemDetails(id,orderId,产品名称,产品费用)

enter image description here

我写了这个查询来获取数据,但没有得到想要的数据。因此,请更正我的查询,以便获得上图中的数据。

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]."'
php mysql sql database
1个回答
0
投票
如果我理解正确,可以在site上使用orders进行简单分组,在site上使用orderItemDetails进行分组,然后在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

© www.soinside.com 2019 - 2024. All rights reserved.