1

是否可以使用 SUM 查询来给我将两列相加的结果?这些列使用 INTERVAL DAY TO SECOND 数据类型,我想将两列的时间相加,得到总时间。

感谢您的阅读!

4

2 回答 2

2

SUM用于聚合多行,将值相加。要从同一行添加两列,请使用+. 例如,给定一个T包含此数据的表:

 A | B
---+---
 1 | 2
 3 | 4

您可以编写SELECT SUM(a), SUM(b) FROM t以获取使用加法聚合以下行的单行T

 SUM(A) | SUM(B)
--------+--------
      4 |      6

SELECT a + b FROM t将两列加在一起:

 A+B
-----
   3
   7

或其中一个SELECT SUM(a) + SUM(b) FROM tSELECT SUM(a+b) FROM t(根据您的喜好)将两种效果结合起来:

 SUM(A)+SUM(B)                 SUM(A+B)
---------------               ----------
            10                       10

对于INTERVAL DAY TO SECOND,情况有点棘手,因为SUM函数仅适用于“任何数字数据类型或任何可以隐式转换为数字数据类型的非数字数据类型”。所以你必须来回做一些转换。鉴于此表:

 A                  | B
---------------------+-------------------
 +1 01:01:01.000001 | +2 02:02:02.000002
 +3 03:03:03.000003 | +4 04:04:04.000004

这个查询:

SELECT NUMTODSINTERVAL(SUM(EXTRACT(DAY FROM a + b)), 'DAY') +
       NUMTODSINTERVAL(SUM(EXTRACT(HOUR FROM a + b)), 'HOUR') +
       NUMTODSINTERVAL(SUM(EXTRACT(MINUTE FROM a + b)), 'MINUTE') +
       NUMTODSINTERVAL(SUM(EXTRACT(SECOND FROM a + b)), 'SECOND') AS "SUM(A+B)"
  FROM t
;

会给出这个结果:

 SUM(A+B)
---------------------
 +10 10:10:10.000010
于 2012-12-11T19:40:02.947 回答
1

您可以添加间隔,没问题:

SQL> select a, b, a+b from t;

A                    B                    A+B
-------------------- -------------------- -----------------------------
+01 00:00:00.000000  +00 00:05:00.000000  +000000001 00:05:00.000000000
+02 00:00:00.000000  +00 00:50:00.000000  +000000002 00:50:00.000000000
+02 00:14:24.000000  +00 00:50:12.000000  +000000002 01:04:36.000000000
于 2012-12-11T21:10:55.373 回答