OracleDB - GROUP BY(HAVING)
📘 GROUP BY
📜 SELECT文解釈順
その前に、SQLのSELECT文の解釈順序を理解しておきましょう.
5:SELECT列名AS別名、計算式、関数式
1:FROMが参照するテーブル名
2:WHERE列名|関数式比較演算子比較値
3:GROUP BYグループのカラム名
4:HAVINGグループ関数式比較演算子比較値
6:ORDER BY列名|別名|列順配列[NULLS FIRST|LAST];
この順番はSQLを使い続ける上で重要なので、ぜひ知っておきましょう!!
GROUP BY注意事項
SELECT文でGROUP BYセクションを使用する場合、SELECTセクションでクエリーを指定するには、GROUP BYセクションに適用されていないすべてのグループ関数の列を作成する必要があります.
ex)
EMPLOYE表では、部門別に同じレベルの従業員の給与合計を照会し、部門コードの昇順にソートします.
SELECT DEPT_CODE, JOB_CODE, SUM(SALARY)
FROM EMPLOYEE
GROUP BY DEPT_CODE, JOB_CODE
ORDER BY DEPT_CODE;
GROUP BYの使用
GROUP BY列名|関数式、...
EMPLOYE表で、部門コード、部門(グループ)ごとに給与合計を表示する
SELECT DEPT_CODE, SUM(SALARY)
FROM EMPLOYEE;
-->DEPT CODE列は23行、SUM(SALARY)列は1行で、1つのテーブルで作成できません.GROUP BYを使用してグループクエリーを行うことができます!
SELECT DEPT_CODE, SUM(SALARY)
FROM EMPLOYEE
GROUP BY DEPT_CODE; -- 부서별로 그룹을 지어 각 그룹의 합계 조회
📜 HAVING節
グループ関数で解くグループの条件を設定します.
(簡単に言えば、WHERE節はグループ用と見なすことができます!)
99 HAVING用法
HAVING列名|関数式比較演算子比較値
部門コード昇順で平均給与が300000ウォン以上の部門を検索
SELECT DEPT_CODE, FLOOR(AVG(SALARY))
FROM EMPLOYEE
WHERE SALARY >= 3000000 -- 급여가 300만 이상인 직원의 부서별 급여 평균
GROUP BY DEPT_CODE
ORDER BY DEPT_CODE;
SELECT DEPT_CODE, FLOOR(AVG(SALARY))
FROM EMPLOYEE
GROUP BY DEPT_CODE
HAVING AVG(SALARY) >= 3000000 -- 부서별 평균 급여가 300만 이상
ORDER BY DEPT_CODE;
📜 集約関数(ROLLUP、CUBE)
𘚟ROLLUP関数
は、
使用方法
EMPLOYEテーブルで、各部門の職階グループ、部門グループ、全従業員の合計報酬を表示します.
SELECT DEPT_CODE, JOB_CODE, SUM(SALARY)
FROM EMPLOYEE
GROUP BY ROLLUP(DEPT_CODE, JOB_CODE)
ORDER BY DEPT_CODE;
CUBE関数
は、
使用方法
EMPLOYE表では、各部門の給与合計、および部門全体の給与合計
SELECT DEPT_CODE, JOB_CODE, SUM(SALARY)
FROM EMPLOYEE
GROUP BY CUBE(DEPT_CODE, JOB_CODE)
ORDER BY 1;
Reference
この問題について(OracleDB - GROUP BY(HAVING)), 我々は、より多くの情報をここで見つけました https://velog.io/@orol116/OracleDB-GROUP-BYHAVINGテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol