関数には,1つの行をもとに1つの値を返す「単一行関数」と,複数の行をもとに1つの値を返す「グループ関数」の2つがあります。

 前回説明した単一関数の主なものは,数値関数,文字関数,日付関数,変換関数,一般関数ですが,そのほかにもDECODEやCASE式などの関数があります。例えば,DECODE関数の実行例は次のとおりです(図1)。

図1●DECODE関数の実行例
図1●DECODE関数の実行例

 同様のことは,CASE式でも行うことができます。図2を確認してください。

図2●CASE式の実行例
図2●CASE式の実行例

 いずれも,DEPTNOが「10」の行には「経理部」を,「20」の行には「マーケティング部」を,というように1つの行に対して1つの値を戻しています。

 では,次の問合せを見てみましょう(図3)。

図3●SUMの実行例
図3●SUMの実行例

 SUMは,SUMMARYの略で,合計を求める関数です。Excelなどにもある関数ですから,説明がなくても分かったことでしょう。

主なグループ関数

 合計は1行だけで求めることは,通常しないはずです。複数の行から合計値を求めることでしょう。つまり,SUMは「グループ関数」です。グループ関数の主な関数は,表1のとおりです。

表1●主なグループ関数
関数意味数値型文字型日付型
SUM合計  
AVG平均  
MAX最大
MIN最小
COUNT行数

 SUMとAVGは,数値型のみが対象です。文字列の合計って考えられませんよね。

 しかし,文字型の列も日付型の列もORDER BY句で並び替えることができました(第2回の4ページ目を参照)。ということは,最も大きい値,小さい値が求められるということですから,MAXとMINが使用できます。ORDER BY句と同様に,古い日付が小さい,新しい日付が大きいと解釈されます。文字列は文字コード順に大きいか小さいかを判断します。

 図4を見てみましょう。

図4●MAXとMINの実行
図4●MAXとMINの実行 [画像のクリックで拡大表示]

 これらのグループ関数は,NULL値は処理対象としません。