OracleBronze11gSQL基礎〜グループ関数〜
今日はグループ関数します。
グループ関数とは
クループ関数とは行のグループに基づく結果を戻す。
そして、グループ関数はNULLは無視(除外(検索されない))されるのだ!!
(↑これ結構肝心!!絶対2問は落とした・・・)
ではどうやって使うのか見ていきます。
▲今日はグループ関数
([]は省略可能)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
--平均を求めれる 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
そしてグループ関数は・・・・
第二レベルまでしかネストできない
あると思います。