6.グループ関数とデータの集計

6.1 グループ関数(複数行関数,集計関数)

複数件の入力データをグループ化して集計処理を行った結果を1つだけ戻す関数

SELECT句,ORDER BY句,HAVING句で使用できる。

WHERE句では使用できない。

 

COUNT関数

取り出されたデータの件数を戻す。数値型,文字型,日付型を戻す式,または列を指定できる。「*」を指定するとすべてのデータの件数を戻す。

 

COUNT( { * | [DISTINCT | ALL ] 式 } )

デフォルトはALL

DISTINCTを指定すると重複を排除してカウントする。

 

MAX関数,MIN関数

MAX関数→最大値を戻す

MIN関数→最小値を戻す

数値型,文字型,日付型を戻す式,列を指定できる。

 

MAX( [ DISTINCT | ALL ] 式)

MIN ( [ DISTINCT | ALL ] 式)

 

AVG関数,SUM関数

AVG関数→平均値を戻す

SUM関数→合計値を戻す

数値型を戻す式,列のみ指定できる。

 

AVG( [DISTINCT | ALL ] 式)

SUM( [DISTINCT | ALL ] 式)

 

 

STDDEV関数

標準偏差を求める

 

VARIANCE関数

分散を求める

 

LISTAGG関数

デリミタ(区切り文字)を指定し,連結した結果を戻す

 

LISTAGG( 連結して表示する列名 [,'デリミタ'])

WITHIN GROUP ( ORDER BY ソート名 [DESC] )

WITHINとGROUPはこの順番を遵守。

 

グループ関数のNULL値の扱い

グループ関数ではNULL値があった場合は無視して集計する。(「*」を指定している場合は無視しない)

 

◯NULL値を0として集計する

NVL関数を使用して0に変換する

集計関数(NVL(式,0))

 

6.2 データのグループ化と取り出すグループの制限

GROUP BYでデータをグループ化する

SELECT文にGROUP BY句を指定すると行をグループ化できる。WHERE句の後ろ,かつORDER BY句の前に指定する。

 

SELECT 列名,グループ関数(列名)

FROM   表名

[WHERE  条件]

[GROUP BY グループ化で使用する列のリスト]

[ORDER BY 並べ替えで使用する列のリスト];

 

GROUP BY 列名  [ , 列名…]

 

・GROUP BYには1つ以上の列を指定する

・列別名は指定できない

・SELECT句の選択リストには「GROUP BY句で指定した列」と「グループ関数」のみ指定できる。

・ORDER BYとGROUP BYを併用する場合,ORDER BYには「GROUP BY句で指定した列」と「グループ関数」のみ指定できる。

・SELECT文にGROUP BY句がある場合は,グループ関数は2レベルまでネストできる。3レベル以上ネストするとエラーになる。

・GROUP BY句に指定した列をSELECT句のリストに指定しなくてもエラーにはならない。

 

HAVING句による取り出すグループの制限

 グループ関数を条件に指定したい場合にはHAVING句を使用する。

必ずWHERE句の後ろ,ORDER BY句の前に指定する。

 

SELECT 列名, グループ関数(列名)

FROM  表名

[WHERE 条件]

[GROUP BY グループ化で使用する列のリスト]

[HAVING グループに対する条件]

[ORDER BY 並べ替えで使用する列のリスト];

 

HAVING句で指定した条件の評価がTRUEになるグループだけが取り出される。

GROUP BY句を指定せずにHAVING句のみ指定すると,選択された行全体が1つのグループとみなされる。