개발을 하다보면 통계 기능을 구현할 때가 있는데 그때 유용하게 쓸 수 있는 ROLLUP 을 정리해 보았다.
롤업을 사용하면 통계 낸 결과의 소계를 쉽게 구할 수 있다.
* Mysql(MariaDB)
SELECT
COL1, SUM(COL2)
FROM TEST_TABLE
GROUP BY COL1 WITH ROLLUP;
* ORACLE
SELECT
COL1, SUM(COL2)
FROM TEST_TABLE
GROUP BY ROLLUP(COL1);
아래는 활용예시이다.
위와 같은 테스트 테이블을 만들었다.
먼저 이름(NAME)으로 그룹핑해서 평균 급여(SALARY)를 구해보았다.
SELECT NAME, ROUND(AVG(SALARY)) FROM TEST_TABLE GROUP BY NAME;
위의 쿼리를 실행하면 다음과 같은 결과를 볼 수 있다.
여기에 롤업을 추가해서 실행해 보았다.
SELECT NAME, ROUND(AVG(SALARY)) FROM TEST_TABLE GROUP BY NAME WITH ROLLUP;
앞서 실행한 결과에 전체의 평균이 추가로 출력된다.
하지만 이는 전체 결과값의 평균이라 한번 더 감싸서 구하면 평균의 평균을 구할 수 있다.
SELECT
NAME,
ROUND(AVG(AVG_SALARY))
FROM
(SELECT
NAME,
ROUND(AVG(SALARY)) AVG_SALARY
FROM TEST_TABLE A
GROUP BY NAME) B
GROUP BY NAME WITH ROLLUP;
위의 쿼리를 실행한 결과 값이다.
평균뿐만 아니라 합계, 최대, 최소 등의 값으로 활용할 수 있다.
비슷하게 오라클에는 CUBE 도 있으니 찾아보는 것을 추천한다.
'DEV > SQL' 카테고리의 다른 글
[PostgreSQL] WITH 구문 사용하기 (공통 테이블 방식 : CTE) (0) | 2023.07.21 |
---|---|
[PostgreSQL] INSERT, UPDATE, DELETE 실행 결과 조회 (RETURNING) (0) | 2023.07.19 |
PostgreSQL Null값 치환 함수 COALESCE (Feat. Oracle NVL) (0) | 2023.07.06 |
[MariaDB] java split() 처럼 쓸 수 있는 함수 SUBSTRING_INDEX (0) | 2023.07.05 |
[MySql] 천 단위, 세 자리마다 콤마 찍는 함수 (0) | 2023.07.04 |