トップ > SQL入門 > 15章
15章 グループ関数
今回はグループ関数について学んでいきます。

前回まで単一行関数について学んできましたが、
今回はグループ関数というものになります。

単一行関数とグループ関数の違い
単一行関数 グループ関数
前回の単一行関数は、一行に対して処理を行うものでした。
テーブルに20行があれば、1行ごとに処理を行い、実行結果は20行返ってきます。

今回学んでいくグループ関数は複数行をまとめて処理し、1つの結果を返します。
つまり20行があれば20行まとめて処理を行い、実行結果は1行だけ返ってきます。

例えば最大値や最小値を求める関数は20行のうち、
最大最小のものだけを取り出すので、実行結果は1つのみとなります。
このようにグループ関数は複数行をまとめて処理し、結果は1つのみ返ってきます。

ではグループ関数の一覧を確認していきましょう。

グループ関数
MAX 最大値を表示
MIN 最小値を表示
AVG 平均値を表示
SUM 合計値を表示
COUNT 件数を表示

見た感じはとても分かりやすい関数ばかりですね。
もちろん今回紹介するグループ関数もごく一部ですのでご了承ください。

MAX,MIN関数



  SQL> SELECT max(first_name),max(salary),max(hire_date)
    2  FROM employees;

  MAX(FIRST_NAME)                MAX(SALARY) MAX(HIRE_
  ------------------------------ ----------- ---------
  Yamamoto                          10000000 01-APR-13


MAX関数は最大を求める関数です。各データ型で使用した場合は以下の通りです。

数値データ:一番大きい値
文字データ:アルファベットのZに近い値
日付データ:最も新しい日付

ちなみにグループ関数の結果は一行で結果が出力されていますね。
また1行で表示されているため、Yamamotoさんの年収が10000000に見えますが、
そうではないのでご注意ください。
employees表の20件のうち、各first_nameの最大値,salaryの最大値,
hire_dateの最大値を表示しています。

  SQL> SELECT min(first_name),min(salary),min(hire_date)
    2  FROM employees;

  MIN(FIRST_NAME)                MIN(SALARY) MIN(HIRE_
  ------------------------------ ----------- ---------
  Akagi                              4000000 07-OCT-92


MIN関数は最小値を求める関数です。各データ型で使用した場合は以下の通りです。

数値データ:一番小さい値
文字データ:アルファベットのaに近い値
日付データ:一番古い日付

AVG,SUM関数



  SQL> SELECT avg(salary) FROM employees;

  AVG(SALARY)
  -----------
   5963157.89


AVG関数は平均値を求めます。上記例では従業員の平均給与を表示しています。
文字、日付データには使用できないのでご注意ください。

  SQL> SELECT sum(salary) FROM employees;

  SUM(SALARY)
  -----------
    113300000


SUM関数は合計値を求めます。上記例では従業員の合計給与を表示しています。
文字、日付データには使用できません。

COUNT関数


COUNT関数は行数を表示する関数です。

グループ関数
COUNT(*) 件数を表示
COUNT(列名) 対象列のNULL以外の件数を表示
COUNT(distinct 列名) 対象列の重複を除いた件数を表示


  SQL> select count(*) from employees;

    COUNT(*)
  ----------
          20


  SQL> select count(dept_id) from employees;

  COUNT(DEPT_ID)
  --------------
              18


  SQL> select count(distinct dept_id) from employees;

  COUNT(DISTINCTDEPT_ID)
  ----------------------
                       5

順に最初はcount(*)で実施しているので全件数を表示しています。

次の例はcount(dept_id)となっているので、NULL以外の件数を表示します。
dept_idは2行がNULLであるため、18行となります。
最後にcount(distinct dept_id)となっていますが、重複行を排除した件数を表示しています。

いかがでしたでしょうか。グループ関数はすべて結果が1行で返ってきました。
複数行をまとめて処理するという意味が理解できたかと思います。

ただグループ関数の使い方はこれだけではあまり拡張性がありません。
次回で紹介するGROUP BY句やHAVING句によって
さらにグループ関数の機能を使うことができるようになります。

本日はここまで。お疲れ様でした。