Oracle Database(以下Oracle DB)には、Excelのように合計値や平均値を出してくれる関数があります。
今回は、そんなOracle DBでの集計ファンクションについてご紹介します!
SELECT文で取得するデータの条件を指定する時にも使ったりできます。
このブログを通じて使いこなしていきましょう。
集計ファンクション、難しそうだね。
お作法(使うためのルール)があって、それを抑えれば大丈夫やで!
記事の信頼性:未経験からIT企業の受託企業へ転職に成功。現役プログラマーの「しう」がOracle DBの集計ファンクションについて書いています。
SUM関数【集計ファンクション①】
合計した値を計算する時には、SUM関数を利用します!
利用する場合は、次のように利用します。
SELECT SUM(student_score) FROM student;
SUM関数を使うと次のような結果が返ってきます。
テーブルに2行、3行と複数データが入っていたとしても、返ってくる結果は1行(合計値)になります。
AVG関数【集計ファンクション②】
平均値を求めたい場合には、AVG関数を利用します!
利用する場合は、
SELECT AVG(student_score) FROM student;
この場合、次のような結果が返ってきます。
使い方はSUM関数と同じなんだね。
MAX、MIN関数【集計ファンクション③】
最大値、最小値を求めたい場合は、MAX、MIN関数を利用します!
利用する場合は、先ほどと同じように
SELECT MAX(student_score) FROM student;
SELECT MIN(student_score) FROM student;
となります。
実行結果は次の通りです。
COUNT【集計ファンクション④】
行数を求めたい場合は、COUNT関数を利用します!
利用する場合は、
SELECT COUNT(*) FROM student;
とすると、行数が表示されます。
注意点としては、COUNT(*)とした場合、NULLも行数として数えられることです。
NULLを除いた行数を数えたい場合は
SELECT COUNT(student_score) FROM student;
のように列名をしていしてあげましょう。
集計ファンクションの注意点
集計ファンクションを利用する場合は、列名を同時に参照できません!
具体的には次のようなSQL文はエラーとなります。
SELECT AVG(student_score), student_score FROM student;
理由としては、AVG関数は結果を1行で返します。
しかし、student_scoreは追加されているデータの数だけ、結果が返ってきます。(複数行の場合も)
つまり、返ってくる結果の行数にズレが出てきてしまうため、エラーとなります。
今回、しうが用意したテーブルではstudent_scoreで4行返ってきます。
そのため、AVG関数とstudent_scoreを同時に利用することはできませんでした。
指定した列の値ごとに集計ファンクションを利用したい場合は、次に紹介するGROUP BYを使います。
GROUP BYの利用
特定の列ごとに集計ファンクションをしようしたい場合は、GROUP BYを利用します!
SQL文の書き方としては、次の通りです。
SELECT SUM(student_score) FROM student GROUP BY student_hight;
このようにすることで、student_hightごとの合計値を求めることができます。
ちなみに、GROUP BYで指定した列に関しては、SELECT文で表示させることができます。
SELECT student_hight, SUM(student_score) FROM student GROUP BY student_hight;
実行結果は次のようになります。
student_hightごとのスコアが表示されていることが確認できます。
【注意点】
集計ファンクションを利用する場合、GROUP BYで指定していない列をSELECT文で表示させることはできません。
SELECT student_score, SUM(student_score) FROM student GROUP BY student_hight;
のようなSQL文はエラーとなります。
SELECTの後にstudent_scoreがありますが、GROUP BYの部分にはstudent_scoreがない(student_hightだけある)のでエラーになります。
実行結果をみると、「GROUP BYの式ではありません。」と表示されることが確認できます。
SQL文を学び始めの時は、陥りがちなエラーやから気をつけてや!
WHEREとHAVINGの違い
WHEREとHAVINGを利用することで、条件を絞り込むことができます!
WHEREを利用する場合は、
SELECT student_hight, SUM(student_score) FROM student WHERE student_hight > 160 GROUP BY student_hight;
のように、GROUP BYの前に書きます。
このように書くことで、student_hightが160より大きい生徒のみ、合計値を計算してくれます。
次にHAVINGについて説明します。
HAVINGを利用する場合は、
SELECT student_hight, SUM(student_score) FROM student GROUP BY student_hight HAVING SUM(student_score) > 140;
のように利用します。(GROUP BYの後に書く)
HAVINGの場合、集計ファンクションを実行した後に絞り込みをおこないます。
今回であれば、スコアの合計を計算して、そのスコアの合計が140より大きい生徒のみ表示しています。
まとめ
いかがでしたか?
今回は、Oracle DBの関数について
- SUM【集計ファンクション①】
- AVG【集計ファンクション②】
- MAX、MIN【集計ファンクション③】
- COUNT【集計ファンクション④】
- 集計ファンクションの注意点
- GROUP BYの利用
- WHEREとHAVINGの違い
の順番でご紹介しました!
慣れると便利な集計ファンクションです。
身につけていってくださいね!
☟あわせて読みたい 「しう」のオススメブログ
コメント