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

Posted

技术标签:

【中文标题】如何在同一查询中添加两个选择命令的结果【英文标题】:How to add results of two select commands in same query 【发布时间】:2013-02-15 11:37:40 【问题描述】:

我目前有两个选择命令,如下所示。我想做的是将结果一起添加到 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

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

【讨论】:

最后的s是什么?是不是打错字了? @Rhys 不,这是子查询的ALIAS。顺便问一下,你用的是什么RDBMS? RDBMS 代表关系数据库管理系统RDBMS is the basis for SQL,适用于所有现代数据库系统,如 MS SQL Server、IBM DB2、Oracle、mysql 等... 它通过来自 Web 应用程序的 JDBC 连接用于 SQLITE DB 您还需要在表格周围添加双引号 projects-time。像这样,select sum(hours) totalHours from "projects-time" 我经常使用这个... UNION [ALL] ...它只是没有再次进入我的脑海...我变老了【参考方案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

【讨论】:

我喜欢这个解决方案,因为它适用于加法和减法 如果其中一个总和为 NULL,则此解决方案(第一个示例)不起作用。【参考方案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

【讨论】:

@JW.: 谨慎,因为我不知道所有 .. :)【参考方案4】:

重复多个聚合,例如:

SELECT sum(AMOUNT) AS TOTAL_AMOUNT FROM ( 
    SELECT AMOUNT FROM table_1
    UNION ALL 
    SELECT AMOUNT FROM table_2 
    UNION ALL 
    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

【讨论】:

以上是关于如何在同一查询中添加两个选择命令的结果的主要内容,如果未能解决你的问题,请参考以下文章

如何在同一个表上组合两个查询以在 MySQL 中获得单个结果集

如何在同一查询中多次将行添加到特定数字

TiOps命令分发如何使用

如何在一张表中添加两个查询?

添加两个变量,其中包含来自同一数据库的两个不同表的值

如何使用单个 SQL 聚合函数查询为同一个聚合函数获取多个结果?