Как добавить результаты двух команд select в одном запросе
В настоящее время у меня есть две команды выбора, как показано ниже. Я хотел бы сделать это, чтобы добавить результаты вместе в SQL-запрос, а не переменные в коде.
select sum(hours) from resource;
select sum(hours) from projects-time;
Возможно ли иметь оба в одном SQL и выводить сумму обоих результатов?
Ответы
Ответ 1
Да. Возможно :D
SELECT SUM(totalHours) totalHours
FROM
(
select sum(hours) totalHours from resource
UNION ALL
select sum(hours) totalHours from projects-time
) s
В качестве побочного элемента, tablename projects-time
необходимо разграничить, чтобы избежать ошибки синтаксиса. Символы разделителя различаются по используемой СУБД.
Ответ 2
Что-то простое, как это, можно сделать с помощью подзапросов в предложении select
:
select ((select sum(hours) from resource) +
(select sum(hours) from projects-time)
) as totalHours
Для такого простого запроса, как этот, такой подвыбор является разумным.
В некоторых базах данных вам может потребоваться добавить from dual
для компиляции запроса.
Если вы хотите выводить каждый отдельно:
select (select sum(hours) from resource) as ResourceHours,
(select sum(hours) from projects-time) as ProjectHours
Если вам нужны обе и сумма, подзапрос удобен:
select ResourceHours, ProjectHours, (ResourceHours+ProjecctHours) as TotalHours
from (select (select sum(hours) from resource) as ResourceHours,
(select sum(hours) from projects-time) as ProjectHours
) t
Ответ 3
UNION ALL
один раз, агрегировать один раз:
SELECT sum(hours) AS total_hours
FROM (
SELECT hours FROM resource
UNION ALL
SELECT hours FROM "projects-time" -- illegal name without quotes in most RDBMS
) x
Ответ 4
Повторите для нескольких агрегаций типа
ВЫБЕРИТЕ сумму (AMOUNT) AS TOTAL_AMOUNT FROM ( SELECT AMOUNT FROM table_1 СОЮЗ ВСЕ SELECT AMOUNT FROM table_2 СОЮЗ ВСЕ SELECT ASSURED_SUM FROM table_3 ....
)
Ответ 5
Если вы хотите использовать несколько операций
select (sel1.s1+sel2+s2)
(select sum(hours) s1 from resource) sel1
join
(select sum(hours) s2 from projects-time)sel2
on sel1.s1=sel2.s2