OracleDB - GROUP BY(HAVING)


📘 GROUP BY

  • は、複数の記録値を有する列であり、同一の値を1つのグループ
  • に組み合わせる.
  • は、複数の値を組み合わせて処理するために使用される.
  • パケットの値について、SELECTセクションではパケット関数が使用されます.
  • 配列関数は1つの結果値のみを計算するため、複数の配列がある場合はエラーが発生します.
  • の複数の結果値を計算するために、グループ関数を適用したグループの基準をORDER 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)

  • パケット計算の結果は、計算値の関数である.
  • GOURP BYセクションでのみ記述される関数.
  • 𘚟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;