Mysql在multiselect中求和

Mysql在multiselect中求和,mysql,sum,multi-select,Mysql,Sum,Multi Select,我要总价(含税)和已付的总价。如果使用第一个查询,则从所有选定列中获取行。这个很好用。但我只想要总数,所以我更改了查询 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.administrat

我要总价(含税)和已付的总价。如果使用第一个查询,则从所有选定列中获取行。这个很好用。但我只想要总数,所以我更改了查询

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)
你知道怎么做吗?

只需封装:

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

谢谢你的解决方案