2014-11-04 153 views
0

我想要total_price_incl_tax中的总额和付款。如果我使用第一个查询,我会从所有选定的列中获取行。这工作正常。但我只想要总计,所以我改变了查询。Mysql对多选的总和

SELECT 
total_price_incl_tax, 
(SELECT SUM(amount) AS total FROM `invoice_payments` WHERE `invoice_id` = s.id AND invoice_type = 'sales') as paid 
FROM sales_invoices AS s 
WHERE s.administration_id = 10605 
AND `s`.`delete` = '0' 
AND `s`.`concept` = '0' 
AND `s`.`subscription` = '0' 
AND (`total_price_incl_tax` <> (SELECT SUM(`amount`) AS sum FROM `invoice_payments` WHERE `invoice_id` = s.id AND invoice_type = 'sales') OR (SELECT SUM(amount) AS sum FROM `invoice_payments` WHERE `invoice_id` = s.id AND invoice_type = 'sales') IS NULL) 

第二个查询的问题是子查询(付费)的总和不正确。这包含最后一行的值,而不是总数。

SELECT 
COUNT(*), 
SUM(total_price_incl_tax) AS total, 
(SELECT SUM(amount) AS total FROM `invoice_payments` WHERE `invoice_id` = s.id AND invoice_type = 'sales') as paid 
FROM sales_invoices AS s 
WHERE s.administration_id = 10605 
AND `s`.`delete` = '0' 
AND `s`.`concept` = '0' 
AND `s`.`subscription` = '0' 
AND (`total_price_incl_tax` <> (SELECT SUM(`amount`) AS sum FROM `invoice_payments` WHERE `invoice_id` = s.id AND invoice_type = 'sales') OR (SELECT SUM(amount) AS sum FROM `invoice_payments` WHERE `invoice_id` = s.id AND invoice_type = 'sales') IS NULL) 

任何想法如何解决这个问题?

回答

1

只是封装:

SELECT 
    count(*), 
    SUM(total_price_incl_tax), 
    SUM(paid) 
FROM 
(
    SELECT 
    total_price_incl_tax, 
    (SELECT SUM(amount) AS total FROM `invoice_payments` WHERE `invoice_id` = s.id AND invoice_type = 'sales') as paid 
    FROM sales_invoices AS s 
    WHERE s.administration_id = 10605 
    AND `s`.`delete` = '0' 
    AND `s`.`concept` = '0' 
    AND `s`.`subscription` = '0' 
    AND (`total_price_incl_tax` <> (SELECT SUM(`amount`) AS sum FROM `invoice_payments` WHERE `invoice_id` = s.id AND invoice_type = 'sales') OR (SELECT SUM(amount) AS sum FROM `invoice_payments` WHERE `invoice_id` = s.id AND invoice_type = 'sales') IS NULL) 
) t 
+0

感谢您的解决方案 – 2014-11-04 14:35:13