코딩 이야기/MS SQL

MSSQL 그룹 SELECT 사용법

안개소리 2025. 3. 31. 09:34

그룹 SELECT 문 종류 및 사용 예

GROUP BY 절

설명 : 특정 열의 값을 기준으로 데이터를 그룹화하고 집계 함수를 사용하여 그룹별 요약 정보를 얻습니다.

 

예제 :

    -- 부서별 평균 급여 조회
    SELECT department_id, AVG(salary) AS average_salary
    FROM employees
    GROUP BY department_id;

    -- 부서별 사원 수 조회
    SELECT department_id, COUNT(*) AS employee_count
    FROM employees
    GROUP BY department_id;
  

HAVING 절

설명 : GROUP BY 절로 생성된 그룹에 대한 조건을 지정합니다.

         WHERE 절은 행에 대한 조건, HAVING 절은 그룹에 대한 조건입니다.

 

예제 :

    -- 평균 급여가 5000 이상인 부서 조회
    SELECT department_id, AVG(salary) AS average_salary
    FROM employees
    GROUP BY department_id
    HAVING AVG(salary) >= 5000;
  

ROLLUP, CUBE, GROUPING SETS 절

설명 : GROUP BY 절의 확장 기능으로, 다양한 수준의 그룹별 집계 결과를 생성합니다.

          ROLLUP은 그룹화 열의 계층 구조에 따른 부분 합계를,

          CUBE는 모든 가능한 조합에 대한 부분 합계를 생성합니다.             

          GROUPING SETS는 사용자가 지정한 조합에 대한 부분 합계를 생성합니다.

 

예제 :

    -- 부서별, 직책별 급여 합계 및 전체 합계 조회 (ROLLUP)
    SELECT department_id, job_id, SUM(salary) AS total_salary
    FROM employees
    GROUP BY ROLLUP(department_id, job_id);

    -- 부서별, 직책별 급여 합계 및 모든 가능한 조합에 대한 합계 조회 (CUBE)
    SELECT department_id, job_id, SUM(salary) AS total_salary
    FROM employees
    GROUP BY CUBE(department_id, job_id);

    -- 부서별 급여 합계 및 직책별 급여 합계 조회 (GROUPING SETS)
    SELECT department_id, job_id, SUM(salary) AS total_salary
    FROM employees
    GROUP BY GROUPING SETS((department_id), (job_id));
  

GROUPING 함수

설명 : ROLLUP, CUBE, GROUPING SETS 절과 함께 사용되며,

         그룹화된 결과에서 특정 열이 부분 합계에 포함되었는지 여부를 나타냅니다.

 

예제 :

    -- 부서별, 직책별 급여 합계 및 부분 합계 여부 표시 (ROLLUP)
    SELECT department_id, job_id, SUM(salary) AS total_salary,
           GROUPING(department_id) AS dept_grouping,
           GROUPING(job_id) AS job_grouping
    FROM employees
    GROUP BY ROLLUP(department_id, job_id);