SUM クエリを使用して、2 つの列を加算した結果を取得することはできますか? これらの列は INTERVAL DAY TO SECOND データ型を使用しており、両方の列の時間を加算して合計時間を計算したいと考えています。
読んでくれてありがとう!
SUM
複数の行を集約し、値を加算するためのものです。同じ行から 2 つの列を追加するには、 を使用します+
。たとえば、次の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
、2 つの列を一緒に追加するには:
A+B
-----
3
7
または、SELECT SUM(a) + SUM(b) FROM t
またはSELECT SUM(a+b) FROM t
(お好みで) 2 つの効果を組み合わせます。
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