SUM () с JOIN возвращает неверные значения - PullRequest
0 голосов
/ 04 мая 2020

Мой стол

product_sale

id | invoice|name|amount
1     123     ab    100
2     123     ab    200

invoice_payment

id | invoice| discount | payment
1      123     20         280

Мой код в php

$sql = "SELECT 
        product_sale.name, 
        SUM(product_sale.amount) AS amount, 
        SUM(invoice_payment.discount) AS discount, 
        SUM(invoice_payment.payment) AS payment 
        FROM product_sale LEFT JOIN (
        SELECT invoice, 
        SUM(discount) AS discount, 
        SUM(payment) AS payment 
        FROM invoice_payment GROUP BY invoice ) 
        invoice_payment ON 
        product_sale.invoice = invoice_payment.invoice 
        GROUP BY product_sale.name";

Но в столбце оплаты результат возвращает неверное значение.

1 Ответ

0 голосов
/ 04 мая 2020

Предварительно объединить обе таблицы по счету:

SELECT ps.name, SUM(ps.amount) AS amount, 
       SUM(ip.discount) AS discount, 
       SUM(ip.payment) AS payment 
FROM (SELECT MAX(ps.name) as name, ps.invoice, SUM(ps.amount) as amount
      FROM product_sale ps
      GROUP BY ps.invoice
     ) ps LEFT JOIN
     (SELECT invoice, SUM(discount) AS discount, SUM(payment) AS payment 
      FROM invoice_payment
      GROUP BY invoice
     ) ip
     ON ps.invoice = ip.invoice 
GROUP BY ps.name;

Примечание. Это позволяет использовать только одно имя в счете.

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