Неправильная сумма, когда я присоединяю вторую таблицу к первой таблице - PullRequest
0 голосов
/ 21 ноября 2019

У меня есть две таблицы:

  1. заказов (идентификатор, сайт, дата заказа, стоимость доставки, amazone_fees, totalAmount, profit_loss, processing_fees)
  2. orderItemDetails (id, orderId, product_name, product_expense)

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]."'

1 Ответ

1 голос
/ 21 ноября 2019

Если я правильно вас понимаю, вы можете использовать простую группу по 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 Fiddle: 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 Fiddle: https://www.db -fiddle.com / f / kgZbS5U1oSgPAGX34URD22 / 0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...