MySQL является гибким в SELECT
списке подзапросов, так что вы можете сделать что-то вроде следующего, даже не нуждаясь в предложении FROM
для основного запроса.
SELECT
(SELECT SUM(costres) - SUM(costadmin)
FROM call_history, client
WHERE MONTH(start) = 3 AND YEAR(start) = 2012
AND call_history.client_reseller_id = client.id
AND client.charging_identifier <> 100000
AND client.charging_identifier <> 999999
) + (
SELECT SUM(costcl) - SUM(costadmin)
FROM call_history, client
WHERE MONTH(start) = 3 AND YEAR(start) = 2012
AND call_history.client_reseller_id = client.id
AND client.charging_identifier = 100000
AND client.charging_identifier <> 999999
) AS yourSum;
Не могу вспомнить, разрешает ли MySQL UNION
внутри подзапросов. Если это так, то немного лучше использовать SUM()
их через UNION
:
SELECT SUM(total) as grand_total FROM
(
SELECT SUM(costres) - SUM(costadmin) AS total
FROM call_history, client
WHERE MONTH(start) = 3 AND YEAR(start) = 2012
AND call_history.client_reseller_id = client.id
AND client.charging_identifier <> 100000
AND client.charging_identifier <> 999999
UNION ALL
SELECT SUM(costcl) - SUM(costadmin) AS total
FROM call_history, client
WHERE MONTH(start) = 3 AND YEAR(start) = 2012
AND call_history.client_reseller_id = client.id
AND client.charging_identifier = 100000
AND client.charging_identifier <> 999999
) unionsub
Обновление:
Быстрый тест говорит мне, что вы можете использовать UNION ALL
в подзапросе, по крайней мере, в MySQL 5.6.