728x90
반응형
WITH ROLLUP
그룹별로 합계를 한 번에 구할 때 사용한다.
GROUP BY를 사용하면 GROUP BY 뒤에 나오는 컬럼별로 합계를 구해주는데,
항목별 합계에 전체 합계가 같이 나오게 하는 것이 WITH ROLLUP이다.
1) WITH ROLLUP 기본 예제
SELECT SUBSTRING(address, 1, 2) as region, gender, COUNT(*)
FROM copang_main.member
GROUP BY region, gender WITH ROLLUP
ORDER BY region ASC, gender DESC;
2) HAVING 컬럼 IS NOT NULL
SELECT SUBSTRING(address, 1, 2) as region, gender, COUNT(*)
FROM copang_main.member
GROUP BY region, gender WITH ROLLUP
HAVING region IS NOT NULL
ORDER BY region ASC, gender DESC;
SELECT SUBSTRING(address, 1, 2) as region, gender, COUNT(*)
FROM copang_main.member
GROUP BY region, gender WITH ROLLUP
HAVING gender IS NOT NULL
ORDER BY region ASC, gender DESC;
GROUP BY 뒤 기준들의 순서에 따라 WITH ROLLUP의 결과도 달라진다.
그루핑 등장 순서에 따라 계층적인 부분 총계를 보여준다.
SELECT YEAR(BIRTHDAY) AS B_YEAR, YEAR(SIGN_UP_DAY) AS S_YEAR, GENDER, COUNT(*)
FROM copang_main.member
GROUP BY B_YEAR, S_YEAR, GENDER WITH ROLLUP
ORDER BY B_YEAR DESC;
SELECT YEAR(SIGN_UP_DAY) AS S_YEAR, YEAR(BIRTHDAY) AS B_YEAR, GENDER, COUNT(*)
FROM copang_main.member
GROUP BY S_YEAR, B_YEAR, GENDER WITH ROLLUP
ORDER BY S_YEAR DESC;
NULL임을 나타내기 위해 쓰인 NULL / 부분 총계를 나타내기 위해 쓰인 NULL
SELECT YEAR(SIGN_UP_DAY) AS S_YEAR, GENDER, SUBSTRING(ADDRESS,1,2) AS REGION, COUNT(*)
FROM copang_main.member
GROUP BY S_YEAR, GENDER, REGION WITH ROLLUP
ORDER BY S_YEAR DESC;
GROUPING(컬럼)
두 개(형광펜칠해진)의 로우중에서 어떤 것이 부분 총계이고 어떤 것이 원래 있는 NULL을 나타내는 건지 구분할 수가 없다.
이 둘을 구분할 수 있게 해주는 함수가 바로 GROUPING 함수이다.
1) 실제로 NULL을 나타내기위해 쓰인 경우에는 0을
2) 부분 총계를 나타내기위해 쓰인 경우에는 1을 나타낸다.
SELECT YEAR(SIGN_UP_DAY) AS S_YEAR, GENDER, SUBSTRING(ADDRESS,1,2) AS REGION,
GROUPING(YEAR(SIGN_UP_DAY)), GROUPING(GENDER), GROUPING(SUBSTRING(ADDRESS,1,2)), COUNT(*)
FROM copang_main.member
GROUP BY S_YEAR, GENDER, REGION WITH ROLLUP
ORDER BY S_YEAR DESC;
728x90
반응형
'Data > MySQL' 카테고리의 다른 글
[MySQL] PRIMARY KEY, FOREIGN KEY 설정하는 다양한 방법 (0) | 2021.01.04 |
---|---|
[MySQL] 여러 테이블을 합쳐 하나의 테이블처럼 보이게 하는 조인의 종류(join) (0) | 2020.12.31 |
[MySQL] GROUP BY - 그룹핑 / HAVING (0) | 2020.12.15 |
[MySQL] 문자열 관련 함수 (0) | 2020.12.15 |
[MySQL] DISTINCT - 중복된 결과를 제거하는 범주 조회 (0) | 2020.12.15 |