【问题标题】: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 中同时输出两个结果的总和?

【问题讨论】:

    标签: sql sqlite select


    【解决方案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。顺便问一下,你用的是什么RDBMSRDBMS 代表关系数据库管理系统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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-01
      • 1970-01-01
      • 2018-09-27
      • 2011-11-10
      • 1970-01-01
      • 1970-01-01
      • 2013-11-23
      相关资源
      最近更新 更多