MENU
👇しうが厳選・おすすめのブログ!
しう
【テニス好きブロガー】 
テニス、読書が好きです。IT企業で学んだこともブログに書いています。高校教諭(テニス部顧問)→IT企業。テニス歴12年。人生をより有意義なものにしたいと思い、ブログを書き始めました。Twitterもしています。
アーカイブ

Oracle DBでの集計関数(ファンクション)の使い方

Oracle DB での 集計ファンクションの使い方

Oracle Database(以下Oracle DB)には、Excelのように合計値や平均値を出してくれる関数があります。

 

今回は、そんなOracle DBでの集計ファンクションについてご紹介します!

 

SELECT文で取得するデータの条件を指定する時にも使ったりできます。

このブログを通じて使いこなしていきましょう。

 

PC好きな一郎君

集計ファンクション、難しそうだね。

しう

お作法(使うためのルール)があって、それを抑えれば大丈夫やで!

 

記事の信頼性:未経験からIT企業の受託企業へ転職に成功。現役プログラマーの「しう」がOracle DBの集計ファンクションについて書いています。

 

目次

SUM関数【集計ファンクション①】

Oracle DB での 集計ファンクションの使い方

合計した値を計算する時には、SUM関数を利用します!

 

利用する場合は、次のように利用します。

SELECT SUM(student_score) FROM student;

 

SUM関数を使うと次のような結果が返ってきます。

 

テーブルに2行、3行と複数データが入っていたとしても、返ってくる結果は1行(合計値)になります。

AVG関数【集計ファンクション②】

平均値を求めたい場合には、AVG関数を利用します!

 

利用する場合は、

SELECT AVG(student_score) FROM student;

 

この場合、次のような結果が返ってきます。

 

PC好きな一郎君

使い方はSUM関数と同じなんだね。

MAX、MIN関数【集計ファンクション③】

Oracle DB での 集計ファンクションの使い方

最大値、最小値を求めたい場合は、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;

のように列名をしていしてあげましょう。

集計ファンクションの注意点

Oracle DB での 集計ファンクションの使い方

集計ファンクションを利用する場合は、列名を同時に参照できません!

 

具体的には次のようなSQL文はエラーとなります。

SELECT AVG(student_score), student_score  FROM student;

 

理由としては、AVG関数は結果を1行で返します。

しかし、student_scoreは追加されているデータの数だけ、結果が返ってきます。(複数行の場合も)

 

つまり、返ってくる結果の行数にズレが出てきてしまうため、エラーとなります。

表示されるエラー

 

今回、しうが用意したテーブルではstudent_scoreで4行返ってきます。

 

そのため、AVG関数とstudent_scoreを同時に利用することはできませんでした。

指定した列の値ごとに集計ファンクションを利用したい場合は、次に紹介するGROUP BYを使います。

GROUP BYの利用

Oracle DB での 集計ファンクションの使い方

特定の列ごとに集計ファンクションをしようしたい場合は、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より大きい生徒のみ表示しています。

 

WHEREとHAVINGの違いは集計前に絞り込むか、集計後に絞り込むかです。

また、SUMやAVGなどの集計ファンクションは、HAVING句では利用可能です。

WHERE句では、集計ファンクションの利用はできないので、気をつけましょう。

まとめ

いかがでしたか?

 

今回は、Oracle DBの関数について

  • SUM【集計ファンクション①】
  • AVG【集計ファンクション②】
  • MAX、MIN【集計ファンクション③】
  • COUNT【集計ファンクション④】
  • 集計ファンクションの注意点
  • GROUP BYの利用
  • WHEREとHAVINGの違い

の順番でご紹介しました!

 

慣れると便利な集計ファンクションです。

身につけていってくださいね!

 

解答・解説に間違いがあれば、お手数ですが下にあるコメントもしくはtwitterよりご連絡ください。

 

☟あわせて読みたい 「しう」のオススメブログ

あわせて読みたい
プログラミングを使ったおすすめの副業【知識を活かして稼ぎたい】 2018年1月から政府は副業を解禁しました。副業でどのようにお金を稼ぐのか興味のある方は多いのではないでしょうか?そこで、今回はプログラミングでおすすめの副業につ...
あわせて読みたい
ORACLE MASTER Silver SQL って何?【新体系版対応】 今回は、ORACLE MASTER Silver SQLについてご紹介します!   ORACLE MASTER Silver SQLはOracle社が認定している資格の一つです。 具体的にどのような試験なのかを見て...
あわせて読みたい
Oracle DB でのINSERT文の使い方【しうの備忘録】 Oracle Database(以下Oracle DB)は世界でもトップクラスのシェアを誇るDBです。   今回は、Oracle DBでのINSERT文についてご紹介します。   SQL文の知識は他のDBでも...
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

【しう】
Java Engineer| 最近はKotlin| 「テニスとJava(プログラミング)のお悩み解決ラボ」運営者| プログラミング・開発現場の学びを主に発信|【経歴】受託系IT企業➪自社開発企業| ∮保有資格∮ : Java Silver,Oracle SQL Silver,基本情報,TOEIC 750,簿記3級

コメント

コメントする

CAPTCHA


目次