OracleBronze11gSQL基礎〜グループ関数〜

今日はグループ関数します。
グループ関数とは

クループ関数とはのグループに基づく結果を戻す。
そして、グループ関数はNULLは無視(除外(検索されない))されるのだ!!
(↑これ結構肝心!!絶対2問は落とした・・・)

ではどうやって使うのか見ていきます。

▲今日はグループ関数
([]は省略可能)

                                                                                                                                                    • -

AVG関数
構文:AVG(列名)
列名を合計して平均を返す

--平均を求めれる
SELECT AVG(COMM) FROM EMP;
                                                                                                                                                    • -

COUNT関数
構文:COUNT([DISTINCT]列名)
列名を合計して平均を返す

--重複とNULL含む全部返ってくる
SELECT COUNT(ENAME) FROM EMP;

--重複含む値が返ってくる
SELECT COUNT(ENAME) FROM EMP;

--こいつは重複しない
SELECT COUNT(DISTINCT ENAME) FROM EMP;
                                                                                                                                                    • -

MAX関数
構文:MAX(列名)
列名の一番大きい値を返す

--最大値を求めれる
SELECT MAX(COMM) FROM EMP;
                                                                                                                                                    • -

MIN関数
構文:MIN(列名)
列名の一番小さい値を返す

--最小値を求める
SELECT MIN(COMM) FROM EMP;
                                                                                                                                                    • -

SUM関数
構文:SUM(列名)
列名を合計して合計を返す

--合計を求めれる
SELECT SUM(COMM) FROM EMP;
                                                                                                                                                    • -


MAX関数とMIN関数だけは引数に以下4点を渡せる
・CHAR
・VARCHAR
・DATE
・NUMBER

で、グループ関数を使うときは
SELECT句で指定したグループ関数以外の列名を
GROUP BY句に含めないといけない。

その際列別名を指定するとエラーになる!!

では吟じます!!

--これはGROUP BYでENAMEを指定しないからエラー
SELECT ENAME,SUM(COMM) FROM EMP;

--これが正解
SELECT ENAME,SUM(COMM) FROM EMP GROUP BY ENAME;

--SELECT句が増えたらその分GROUP BYに含めよう。でないとエラーになるよ
SELECT EMPNO,ENAME,SUM(COMM) FROM EMP GROUP BY EMPNO,ENAME;

--列別名はエラーなる。これはエラーの文です
SELECT EMPNO AS NO,ENAME,SUM(COMM) FROM EMP GROUP BY NO,ENAME;

あると思います!!

そして、この関数使ってる間に
「あぁ、SUM関数でだした値が100未満のやつだけ検索したいねんけど・・・」
と思うときがくるよ。

そんなときゃ〜〜♪
HAVINGを使用します。
WHERE使ったことあると思うけど、WHERE〜〜をHAVING グループ関数に変えたら良いだけ

HAVING SUM(COMM) <= 100

ってしたらいいだけ〜。
グループ関数をWHEREで使ったらエラーなるからね。

HAVINGの使用方法
・SELECT句で定義してなくても使える
・GROUPBYを定義していなくても使える。
・GROUPBYを指定したグループ関数以外の列に条件をつけたいときはHAVING

そしてグループ関数は・・・・
第二レベルまでしかネストできない


あると思います。