countとmaxとminとsum
データ件数や最大値や最小値や合計を求める
要素数(データ件数)を求めるのがcount関数。
最大値を求めるのがmax関数。
最小値を求めるのがmin関数。
数値型の合計を求めるのがsum関数となります。
create table AggSample1(ID,Val) as
select 111,0 from dual union all
select 111,2 from dual union all
select 111,6 from dual union all
select 222,4 from dual union all
select 222,5 from dual union all
select 333,7 from dual; IDごとの、データ件数,Valの最大値,Valの最小値,Valの合計を求めてみます。
select ID,count(*) as cnt,
max(Val) as maxVal,min(Val) as minVal,
sum(Val) as sumVal
from AggSample1
group by ID
order by ID;
出力結果
ID cnt maxVal minVal sumVal
--- --- ------ ------ ------
111 3 6 0 8
222 2 5 4 9
333 1 7 7 7 ListAggとwmsys.wm_concat
文字列を連結してまとめる
ListAgg関数やwmsys.wm_concat関数を使うと、文字列を連結してまとめることができます。
wmsys.wm_concat関数は、Oracle11gR2の段階でマニュアルに記載されていないので、注意して使う必要があります。
wmsys.wm_concat関数と似たような機能を持つListAgg関数は、Oracle11gR2で追加された関数です。
create table AggSample2(ID,Val) as
select 111,'A' from dual union all
select 111,'B' from dual union all
select 111,'C' from dual union all
select 222,'D' from dual union all
select 222,'E' from dual union all
select 333,'F' from dual; IDごとの、Valを連結した値を求めてみます。
select ID,
wmsys.wm_concat(Val) as strAgg1,
ListAgg(Val,',') withIn group(order by Val) as strAgg2,
ListAgg(Val,',') withIn group(order by Val desc) as strAgg3
from AggSample2
group by ID
order by ID;
出力結果
ID strAgg1 strAgg2 strAgg3
--- ------- ------- -------
111 A,C,B A,B,C C,B,A
222 D,E D,E E,D
333 F F F avgとmedianとstats_mode
平均値や中央値や最頻値を求める
数値型の平均値を求めるのがavg関数。
中央値(メジアン)を求めるのがmedian関数。
最頻値(モード)を求めるのがstats_mode関数となります。
create table AggSample3(ID,Val) as
select 111,10 from dual union all
select 111,30 from dual union all
select 222,40 from dual union all
select 222,40 from dual union all
select 333,10 from dual union all
select 333,10 from dual union all
select 333,40 from dual union all
select 444,60 from dual union all
select 444,90 from dual; IDごとの、Valの平均値,Valの中央値,Valの最頻値を求めてみます。
select ID,
avg(Val) as avgVal,
median(Val) as medianVal,
stats_mode(Val) as modeVal
from AggSample3
group by ID
order by ID;
出力結果
ID avgVal medianVal modeVal
--- ------ --------- -------
111 20 20 10
222 40 40 40
333 20 10 10
444 75 75 60