是否可以使用 SUM 查询来给我将两列相加的结果?这些列使用 INTERVAL DAY TO SECOND 数据类型,我想将两列的时间相加,得到总时间。
感谢您的阅读!
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 t
或SELECT 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
您可以添加间隔,没问题:
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