2014-11-04 36 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