如何在同一查询中添加两个选择命令的结果

Rhy*_*hys 26 sql sqlite select

我目前有两个选择命令,如下所示.我想要做的是在SQL查询中添加结果而不是代码中的变量.

select sum(hours) from resource;
select sum(hours) from projects-time;
Run Code Online (Sandbox Code Playgroud)

是否可以在同一个SQL中同时输出两个结果的总和?

Joh*_*Woo 55

是.有可能的:D

SELECT  SUM(totalHours) totalHours
FROM
        ( 
            select sum(hours) totalHours from resource
            UNION ALL
            select sum(hours) totalHours from projects-time
        ) s
Run Code Online (Sandbox Code Playgroud)

作为旁注,projects-time必须分隔表名以避免语法错误.分隔符符号因您使用的RDBMS而异.


Gor*_*off 26

像这样简单的东西可以使用select子句中的子查询来完成:

select ((select sum(hours) from resource) +
        (select sum(hours) from projects-time)
       ) as totalHours
Run Code Online (Sandbox Code Playgroud)

对于这样的简单查询,这样的子选择是合理的.

在某些数据库中,您可能必须添加from dual要编译的查询.

如果要单独输出每个:

select (select sum(hours) from resource) as ResourceHours,
       (select sum(hours) from projects-time) as ProjectHours
Run Code Online (Sandbox Code Playgroud)

如果你想要两者总和,子查询很方便:

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
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢这个解决方案,因为它适用于加法和减法 (2认同)

Erw*_*ter 11

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
Run Code Online (Sandbox Code Playgroud)

  • @JW.:因为我不知道*所有*..谨慎谨慎:) (3认同)