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つのグループとみなされる。