9 組込みの集計関数
Oracle Continuous Query Language (Oracle CQL)に含まれる組込みの集計関数のリファレンスを提供します。組込みの集計関数は、問合せが返すすべての値の集計操作を行います。
9.1 Oracle CQLの組込みの集計関数の概要
表9-1に、Oracle CQLに用意されている組込みの集計関数を示します。
選択された重複するタプルの各セットのコピーを1つだけGGSAが返すようにする場合は、distinct
を指定します。重複タプルとはselectリスト内の各式と一致する値を持つタプルです。詳細は、次の項を参照してください。
GGSAでは、ネストされた集計はサポートされていません。
ノート:
組込み関数名では大文字と小文字が区別されるため、表示されている方(小文字)を使用してください。
ノート:
ストリーム入力の例で、h
で始まる行(h 3800
など)はハートビート入力タプルです。この情報により、GGSAには、タイムスタンプがハートビート値より小さい入力は行われないことが通知されます。
詳細については、以下を参照:
9.1.1 組込み集計関数とWhere、Group ByおよびHaving句
Oracle CQLでは、where
句はgroup by
句およびhaving
句の前に適用されます。つまり、次のOracle CQL文は無効です。
<query id="q1"><![CDATA[
select * from InputChanel[rows 4 slide 4] as ic where count(*) = 4
]]></query>
かわりに、次のOracle CQL文を使用する必要があります。
<query id="q1"><![CDATA[
select * from InputChanel[rows 4 slide 4] as ic where count(*) = 4
]]></query>
9.2 avg
構文

目的
avg
は、expr
の平均値を返します。
この関数は、bigint
、float
またはint
データ型を引数として使用します。また、引数の数値データ型に関係なくfloat
を返します。
入出力の型
次の表に、入力の型および対応する出力の型を示します。
入力の型 |
出力の型 |
|
|
|
|
|
|
|
|
|
|
例
問合せfloat_avg
とデータ・ストリームS3
があるとします。ストリームS3
のスキーマは(c1 float)
です。この問合せはリレーションを返します。平均値が数字でない場合、avg
関数はNaN
の結果を返します。
<query id="float_avg"><![CDATA[
select avg(c1) from S3[range 5]
]]></query>
Timestamp Tuple
1000
2000 5.5
8000 4.4
9000
15000 44.2
h 200000000
Timestamp Tuple Kind Tuple
1000: -
1000: + 0.0
2000: - 0.0
2000: + 5.5
6000: - 5.5
6000: + 5.5
7000: - 5.5
8000: -
8000: + 4.4
9000: - 4.4
9000: + 4.4
13000: - 4.4
13000: + NaN
14000: - NaN
14000: +
15000: -
15000: + 44.2
20000: - 44.2
20000: +
9.3 count
構文

目的
count
は、問合せが返すタプル数をint
の値として返します。
表9-2に示すように、戻り値は引数によって異なります。
表9-2 COUNT集計関数の戻り値
入力引数 | 戻り値 |
---|---|
|
|
|
重複とnullを含む、すべてのタプルの数。 |
|
相関変数 |
|
|
count
は、nullを返しません。
例
問合せq2
とデータ・ストリームS2
があるとします。ストリームS2
のスキーマは(c1 integer, c2 integer)
です。この問合せはリレーションを返します。
<query id="q2"><![CDATA[ SELECT COUNT(c2), COUNT(*) FROM S2 [RANGE 10] ]]></query>
Timestamp Tuple 1000 1,2 2000 1, 3000 1,4 6000 1,6
Timestamp Tuple Kind Tuple -9223372036854775808: + 0,0 1000: - 0,0 1000: + 1,1 2000: - 1,1 2000: + 1,2 3000: - 1,2 3000: + 2,3 6000: - 2,3 6000: + 3,4
9.4 first
構文

目的
first
は、指定されたパターンに最初に一致する、指定されたストリーム要素の値を返します。
指定されるストリーム要素の型は、次のいずれかになります。
-
bigint
-
integer
-
byte
-
char
-
float
-
interval
-
timestamp
この関数の戻り値の型は、指定されたストリーム要素の型によって異なります。
この関数は、ピリオドで区切られた次の値で構成される1つの引数を使用します。
-
identifier1
:DEFINE
句で指定されたパターンの名前。 -
identifier2
:CREATE STREAM
文で指定されたストリーム要素の名前。
例
問合せq9
とデータ・ストリームS0
があるとします。ストリームS0
のスキーマは(c1 integer, c2 float)
です。この例では、パターンC
をC.c1 = 7
と定義します。また、firstc
をfirst(C.c2)
と定義します。つまり、最初にc1 = 7
になった場合に、firstc
は値c2
と等しくなります。この問合せはリレーションを返します。
<query id="q9"><![CDATA[ select T.firstc, T.lastc, T.Ac1, T.Bc1, T.avgCc1, T.Dc1 from S0 MATCH_RECOGNIZE ( MEASURES first(C.c2) as firstc, last(C.c2) as lastc, avg(C.c1) as avgCc1, A.c1 as Ac1, B.c1 as Bc1, D.c1 as Dc1 PATTERN(A B C* D) DEFINE A as A.c1 = 30, B as B.c2 = 10.0, C as C.c1 = 7, D as D.c1 = 40 ) as T ]]></query>
Timestamp Tuple 1000 33,0.9 3000 44,0.4 4000 30,0.3 5000 10,10.0 6000 7,0.9 7000 7,2.3 9000 7,8.7 11000 40,6.6 15000 19,8.8 17000 30,5.5 20000 5,10.0 23000 40,6.6 25000 3,5.5 30000 30,2.2 35000 2,10.0 40000 7,5.5 44000 40,8.9
Timestamp Tuple Kind Tuple 11000: + 0.9,8.7,30,10,7.0,40 23000: + ,,30,5,,40 44000: + 5.5,5.5,30,2,7.0,40
9.5 last
構文

目的
last
は、指定されたパターンに最後に一致する、指定されたストリーム要素の値を返します。
指定されるストリーム要素の型は、次のいずれかになります。
-
bigint
-
integer
-
byte
-
char
-
float
-
interval
-
timestamp
この関数の戻り値の型は、指定されたストリーム要素の型によって異なります。
この関数は、ピリオドで区切られた次の値で構成される1つの引数を使用します。
-
identifier1
:DEFINE
句で指定されたパターンの名前。 -
identifier2
:CREATE STREAM
文で指定されたストリーム要素の名前。
例
問合せq9
とデータ・ストリームS0
があるとします。ストリームS1
のスキーマは(c1 integer, c2 float)
です。この例では、パターンC
をC.c1 = 7
と定義します。また、lastc
をlast(C.c2)
と定義します。つまり、最後にc1 = 7
になった場合に、lastc
は値c2
と等しくなります。この問合せはリレーションを返します。
<query id="q9"><![CDATA[ select T.firstc, T.lastc, T.Ac1, T.Bc1, T.avgCc1, T.Dc1 from S0 MATCH_RECOGNIZE ( MEASURES first(C.c2) as firstc, last(C.c2) as lastc, avg(C.c1) as avgCc1, A.c1 as Ac1, B.c1 as Bc1, D.c1 as Dc1 PATTERN(A B C* D) DEFINE A as A.c1 = 30, B as B.c2 = 10.0, C as C.c1 = 7, D as D.c1 = 40 ) as T ]]></query>
Timestamp Tuple 1000 33,0.9 3000 44,0.4 4000 30,0.3 5000 10,10.0 6000 7,0.9 7000 7,2.3 9000 7,8.7 11000 40,6.6 15000 19,8.8 17000 30,5.5 20000 5,10.0 23000 40,6.6 25000 3,5.5 30000 30,2.2 35000 2,10.0 40000 7,5.5 44000 40,8.9
Timestamp Tuple Kind Tuple 11000: + 0.9,8.7,30,10,7.0,40 23000: + ,,30,5,,40 44000: + 5.5,5.5,30,2,7.0,40
9.6 listagg
構文

目的
listagg
は、その関数の引数に相当するJavaの値を含むjava.util.List
を返します。
関数の引数としてユーザー定義のクラスが使用される場合、そのクラスはequals
メソッドを実装する必要があります。
例
<view id="v1"><![CDATA[ ISTREAM(select c1, listAgg(c3) as l1, java.util.LinkedHashSet(listAgg(c3)) as set1 from S1 group by c1) ]]></view> <query id="q1"><![CDATA[ select v1.l1.size(), v1.set1.size() from v1 ]]></query>
Timestamp Tuple 1000 orcl, 1, 15, 400 1000 msft, 1, 15, 400 2000 orcl, 2, 20, 300 2000 msft, 2, 20, 300 5000 orcl, 4, 5, 200 5000 msft, 4, 5, 200 7000 orcl, 3, 10, 100 7000 msft, 3, 20, 100 h 20000000
Timestamp Tuple Kind Tuple 1000: + 1,1 1000: + 1,1 2000: + 2,2 2000: + 2,2 5000: + 3,3 5000: + 3,3 7000: + 4,4 7000: + 4,3
9.7 max
構文

目的
max
は、expr
の最大値を返します。そのデータ型は引数のデータ型によって異なります。
例
問合せtest_max_timestamp
とデータ・ストリームS15
があるとします。ストリームS15
のスキーマは(c1 int, c2 timestamp)
です。この問合せはリレーションを返します。
<query id="test_max_timestamp"><![CDATA[ select max(c2) from S15[range 2] ]]></query>
Timestamp Tuple 10 1,"08/07/2004 11:13:48" 2000 ,"08/07/2005 11:13:48" 3400 3,"08/07/2006 11:13:48" 4700 ,"08/07/2007 11:13:48" h 8000 h 200000000
Timestamp Tuple Kind Tuple 0: + 10: - 10: + 08/07/2004 11:13:48 2000: - 08/07/2004 11:13:48 2000: + 08/07/2005 11:13:48 2010: - 08/07/2005 11:13:48 2010: + 08/07/2005 11:13:48 3400: - 08/07/2005 11:13:48 3400: + 08/07/2006 11:13:48 4000: - 08/07/2006 11:13:48 4000: + 08/07/2006 11:13:48 4700: - 08/07/2006 11:13:48 4700: + 08/07/2007 11:13:48 5400: - 08/07/2007 11:13:48 5400: + 08/07/2007 11:13:48 6700: - 08/07/2007 11:13:48 6700: +
9.8 min
構文

目的
min
は、expr
の最小値を返します。そのデータ型は引数のデータ型によって異なります。
例
問合せtest_min_timestamp
とデータ・ストリームS15
があるとします。ストリームS15
のスキーマは(c1 int, c2 timestamp)
です。この問合せはリレーションを返します。
<query id="test_min_timestamp"><![CDATA[ select min(c2) from S15[range 2] ]]></query>
Timestamp Tuple 10 1,"08/07/2004 11:13:48" 2000 ,"08/07/2005 11:13:48" 3400 3,"08/07/2006 11:13:48" 4700 ,"08/07/2007 11:13:48" h 8000 h 200000000
Timestamp Tuple Kind Tuple 0: + 10: - 10: + 08/07/2004 11:13:48 2000: - 08/07/2004 11:13:48 2000: + 08/07/2004 11:13:48 2010: - 08/07/2004 11:13:48 2010: + 08/07/2005 11:13:48 3400: - 08/07/2005 11:13:48 3400: + 08/07/2005 11:13:48 4000: - 08/07/2005 11:13:48 4000: + 08/07/2006 11:13:48 4700: - 08/07/2006 11:13:48 4700: + 08/07/2006 11:13:48 5400: - 08/07/2006 11:13:48 5400: + 08/07/2007 11:13:48 6700: - 08/07/2007 11:13:48 6700: +
9.9 sum
構文

目的
sum
は、expr
の値の合計を戻します。この関数は、bigint
、float
またはinteger
式を引数として使用します。また、引数の数値データ型と同じデータ型を返します。
例
問合せq3
とデータ・ストリームS1
があるとします。ストリームS1
のスキーマは(c1 integer, c2 bigint)
です。この問合せはリレーションを返します。range
の詳細は、次を参照してください。
<query id="q3"><![CDATA[ select sum(c2) from S1[range 5] ]]></query>
Timestamp Tuple 1000 5, 1000 10,5 2000 ,4 3000 30,6 5000 45,44 7000 55,3 h 200000000
Timestamp Tuple Kind Tuple 1000: - 1000: + 5 2000: - 5 2000: + 9 3000: - 9 3000: + 15 5000: - 15 5000: + 59 6000: - 59 6000: + 54 7000: - 54 7000: + 53 8000: - 53 8000: + 47 10000: - 47 10000: + 3 12000: - 3 12000: +