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
谢谢你的解决方案