Сумма подзапросов - MySQL

Узнай цену своей работы

Формулировка задачи:

Есть запрос
SELECT 
( (SELECT SUM(zakaz_teplica_tovar.summa) FROM zakaz_teplica_tovar LEFT JOIN zakaz_teplica ON zakaz_teplica_tovar.id_zakaz_teplica=zakaz_teplica.id WHERE zakaz_teplica.id_zakaz=zakaz.id AND zakaz_teplica_tovar.name LIKE "%сборка%") 
+ 
(SELECT SUM(zakaz_dop.summa) FROM zakaz_dop WHERE zakaz_dop.name LIKE "%сборка%" AND zakaz_dop.id_zakaz=zakaz.id) )
 
FROM `zakaz` ORDER BY id
По отдельности выводится все отлично, но никак не могу понять, как получить сумму этих двух подзапросов?

Решение задачи: «Сумма подзапросов»

textual
Листинг программы
select id_zakaz, sum(summa) from
(select id_zakaz, summa from tovar1
union all
select id_zakaz, summa from tovar2) t join zakaz z on t.id_zakaz=z.id
group by id_zakaz;

Объяснение кода листинга программы

В этом коде происходит следующее:

  1. Внутренний запрос (подзапрос) выполняется дважды: для таблицы tovar1 и для таблицы tovar2.
  2. Для каждой из этих таблиц подсчитывается сумма значений столбца summa для каждого id_zakaz.
  3. Результаты этих подсчетов объединяются в одну таблицу с помощью оператора UNION ALL.
  4. Полученная таблица присоединяется (объединяется) к таблице zakaz по полю id_zakaz.
  5. Для полученной таблицы подсчитывается сумма значений столбца summa для каждого id_zakaz.
  6. Результат этой операции выводится на экран.

Оцени полезность:

13   голосов , оценка 3.769 из 5