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

▲ ページTOPに戻る

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

▲ ページTOPに戻る

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

▲ ページTOPに戻る

Left Curve
図でイメージする
Oracle DatabaseのSQL全集
Right Curve