関数には,1つの行をもとに1つの値を返す「単一行関数」と,複数の行をもとに1つの値を返す「グループ関数」の2つがあります。
前回説明した単一関数の主なものは,数値関数,文字関数,日付関数,変換関数,一般関数ですが,そのほかにもDECODEやCASE式などの関数があります。例えば,DECODE関数の実行例は次のとおりです(図1)。
図1●DECODE関数の実行例 |
同様のことは,CASE式でも行うことができます。図2を確認してください。
図2●CASE式の実行例 |
いずれも,DEPTNOが「10」の行には「経理部」を,「20」の行には「マーケティング部」を,というように1つの行に対して1つの値を戻しています。
では,次の問合せを見てみましょう(図3)。
図3●SUMの実行例 |
SUMは,SUMMARYの略で,合計を求める関数です。Excelなどにもある関数ですから,説明がなくても分かったことでしょう。
主なグループ関数
合計は1行だけで求めることは,通常しないはずです。複数の行から合計値を求めることでしょう。つまり,SUMは「グループ関数」です。グループ関数の主な関数は,表1のとおりです。
関数 | 意味 | 数値型 | 文字型 | 日付型 |
---|---|---|---|---|
SUM | 合計 | ○ | ||
AVG | 平均 | ○ | ||
MAX | 最大 | ○ | ○ | ○ |
MIN | 最小 | ○ | ○ | ○ |
COUNT | 行数 | ○ | ○ | ○ |
SUMとAVGは,数値型のみが対象です。文字列の合計って考えられませんよね。
しかし,文字型の列も日付型の列もORDER BY句で並び替えることができました(第2回の4ページ目を参照)。ということは,最も大きい値,小さい値が求められるということですから,MAXとMINが使用できます。ORDER BY句と同様に,古い日付が小さい,新しい日付が大きいと解釈されます。文字列は文字コード順に大きいか小さいかを判断します。
図4を見てみましょう。
図4●MAXとMINの実行 [画像のクリックで拡大表示] |
これらのグループ関数は,NULL値は処理対象としません。