[SQLP]그룹함수(GROUP BY,ROLLUP,CUBE,GROUPING SETS)

·2025년 1월 3일

SQLP

목록 보기
1/20

🤷‍그룹 함수란?

그룹 함수(Group Functions) 또는 집계 함수(Aggregate Functions)는 여러 행의 값을 하나의 결과로 집계할 대 사용되는 함수들이다. GROUP BY,ROLLUP,CUBE,GROUPING SETS등이 있다.

-샘플 데이터

CREATE TABLE Employees (
    EmployeeID INT PRIMARY KEY,
    Name VARCHAR(100),
    Department VARCHAR(50),
    JobTitle VARCHAR(50),
    Salary DECIMAL(10, 2)
);



INSERT ALL
  INTO Employees (EmployeeID, Name, Department, JobTitle, Salary) VALUES (1, 'John Doe', 'HR', 'Manager', 60000)
  INTO Employees (EmployeeID, Name, Department, JobTitle, Salary) VALUES (2, 'Jane Smith', 'HR', 'Assistant', 40000)
  INTO Employees (EmployeeID, Name, Department, JobTitle, Salary) VALUES (3, 'Michael Johnson', 'IT', 'Developer', 75000)
  INTO Employees (EmployeeID, Name, Department, JobTitle, Salary) VALUES (4, 'Emily Davis', 'IT', 'Manager', 80000)
  INTO Employees (EmployeeID, Name, Department, JobTitle, Salary) VALUES (5, 'Daniel Lee', 'Sales', 'Salesperson', 50000)
  INTO Employees (EmployeeID, Name, Department, JobTitle, Salary) VALUES (6, 'Laura Kim', 'Sales', 'Manager', 85000)
SELECT * FROM dual;

😺1.GROUP BY : 기본적인 그룹화

GROUP BY는 지정된 컬럼을 기준으로 데이터를 그룹화하여 각 그룹에 대해 집계함수(SUM,COUNT,AVG 등)를 적용할 수 있게 해준다.

  • 부서별로 직원수를 계산


부서별로 데이터를 그룹화하고, 각 그룹에 속한 직원수를 COUNT(*)을 통해 계산한다.

😺2.ROLLUP : 계층적인 그룹화

ROLLUP함수는 소그룹간의 합계를 계산하는 함수이다. ROLLUP을 사용하면 GROUP BY로 묶은 각각의 소그룹 합계전체 합계를 모두 구할 수 있다.

예를들어 Department와 JobTitle을 기준으로 집계한 후,각 부서에 대한 합계를 계산하고,마지막에 전체 합계를 계산한다.

GROUP BY 절에 명시한 모든 컬럼에 대한 소그룹 합계를 구하는 것이 아니라, 처음 명시한 컬럼(예: Department)에 대해서만 소그룹 합계를 구해준다.

🤔문제풀다가 헷려서 정리한 부분
GROUP BY절에서 괄호 두번치면 소계는 안뜨고 합계만 뜸..

각각 괄호치면 결과는 같음

😺3.CUBE : 모든 가능한 조합의 그룹화

CUBE는 모든 가능한 조합에 대한 집계를 계산한다. ROLLUP은 주어진 컬럼 순서대로 계층적 집계를 계산하는 반면,CUBE는 가능한 모든 집합에 대해 집계를 계산한다.

CUBE(Department,JobTitle)의 동작
1.부서와 직책별 집계 : 각 부서와 직책에 속한 직원수를 계산
2. 부서별 집계 : 각 부서별로 모든 직책을 합산하여 해당 부서의 직원수를 계산
3. 직책별 집계 : 각 직책별로 모든 부서를 합산하여 해당 직책의 직원 수를 계산
4. 전체 합계: 모든 부서와 직책을 합산하여 전체 직원수 계산

😺4.GROUPING SETS

GROUPING SETS는 특정 항목에 대한 소계를 계산하는 함수이다.


1-2-3-4 순서대로 결과가 나오지 않는 이유는 GROUPING SETS는 명시된 순서대로 집계를 처리하지만, 정렬과 NULL 값 처리에 따라 출력 순서는 달라질 수 있다고 한다.

profile
냐홍

0개의 댓글