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句によって
さらにグループ関数の機能を使うことができるようになります。
本日はここまで。お疲れ様でした。