経緯
集計関数の問合せできるできないルールがちょっと混乱することがあるので、解いて行きたい。
1,集計関数でネストしている場合
SELECT MIN(AVG(sal)) FROM emp;
employees の salary の 平均avg の 最小値min が欲しい。一見良さそうであるが、group by句がないので2つ目のネストはできない。1つ目までなら可能である。
実際のエラー
→ ORA-00978: nested group function without GROUP BY
対処
①group byつけてみる
→OK
②SELECT AVG(sal) FROM emp;(MINを抜いてみる)
→OK
2,集計関数でネストしていて、select句でグループ化のキーがある場合
SELECT empno, AVG(MIN(sal)) FROM emp GROUP BY empno;
集計関数を集計関数でネストするとselect句でグループ化のキーの設定ができない。
GROUP BYで設定していないキーはselect句で設定できないのだ。
実際のエラー
→ORA-00937: not a single-group group function
対処法
①ネストを解く
SELECT empno, MIN(sal) FROM emp GROUP BY empno;
→OK
②select句のempnoを外す
→OK
3,複数のキーでグループ化
SELECT deptno, empno, MIN(sal) FROM emp GROUP BY empno,deptno;
→OK
4,GROUP BY句がないHAVING句は指定できない
SELECT job, MIN(sal) FROM emp HAVING job='SALESMAN';
実際のエラー
→ORA-00979: not a GROUP BY expression
5,HAVING句はグループ化後の結果に対して絞り込む
SELECT job, MIN(sal) FROM emp group by job HAVING MIN(sal) > 200;