일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- pointcut
- 리눅스
- POJO
- 프로퍼티
- unix
- spring framework
- @test
- SpringJDBC
- Spring Boot
- spring
- AOP
- STS
- myBatis
- Dependency Injection
- @JUnit
- Di
- XML
- java spring
- @Spring-Test
- Spring JDBC
- 컨테이너
- JDBC TEMPLATE
- Framework
- 마이바티스
- @AspectJ
- Linux
- Ubunt
- java
- spring aop
- JdbcTemplate
- Today
- Total
개키우는개발자 : )
PostgreSQL GROUPING SET 절 본문
실습테이블 만들기 https://dog-developers.tistory.com/140
GROUPING SET 이란?
여러 개의 UNION ALL을 이용한 SQL과 같은 결과를 도출할 수 있다.
실습
- SALES 테이블을 BRAND 와 SEGMENT 컬럼 기준으로 GROUP BY 합니다.
SELECT
BRAND,
SEGMENT,
SUM (QUANTITY)
FROM
SALES
GROUP BY
BRAND,
SEGMENT;
일반적인 조회와 값이 별다른 변화가 없습니다.
- SALES 테이블을 BRAND 컬럼 기준으로 GROUP BY 합니다.
SELECT
BRAND,
SUM (QUANTITY)
FROM
SALES
GROUP BY
BRAND;
그룹화된 BRAND 의 QUANTITY의 합계를 보여줍니다.
- SALES 테이블을 SEGMENT컬럼 기준으로 GROUP BY 합니다.
SELECT
SEGMENT,
SUM (QUANTITY)
FROM
SALES
GROUP BY
SEGMENT;
그룹화된 SEGMENT의 QUANTITY의 합계를 보여줍니다.
- SALES 테이블의 QUANTITY 컬럼의 합계를 조회합니다.
SELECT
SUM (QUANTITY)
FROM
SALES
모든 합계
- SALES 테이블의 UNION ALL을 이용하여 BRAND,SEGMENT 기준, BRAND 기준, SEGMENT기준, 전체 기준으로 QUANTITY 합계의 값을 구합니다.
SELECT
BRAND,
SEGMENT,
SUM(QUANTITY)
FROM
SALES
GROUP BY
BRAND,
SEGMENT
UNION ALL
SELECT
BRAND,
NULL,
SUM(QUANTITY)
FROM
SALES
GROUP BY
BRAND
UNION ALL
select
NULL,
SEGMENT,
SUM(QUANTITY)
FROM
SALES
GROUP BY
SEGMENT
UNION ALL
SELECT
NULL,
NULL,
SUM(QUANTITY)
FROM
SALES
UNION ALL 은 SELECT 리스트의 컬럼이 같은수의 동일한 형식이라면 데이터 집합을 합쳐주는 역할을 합니다.
- GROUPING SET 절 기본문법
SELECT
C1,
C2,
집계 함수(C3)
FROM
TABLE_NAME
GROUP BY
GROUPING SETS
(
(C1,C2),
(C1),
(C2),
()
);
- 위의 UNION ALL 작성법을 GROUPING SET 문법을 활용하여 작성 합니다.
SELECT
BRAND,
SEGMENT,
SUM(QUANTITY)
FROM
SALES
GROUP BY
GROUPING SETS
(
(BRAND,SEGMENT),
(BRAND),
(SEGMENT),
()
)
동일한 데이터를 훨씬 간결하게 작성할 수 있습니다.
- GROUPING SET 절의 GROUPING 함수를 활용
SELECT
GROUPING(BRAND) GROUPING_BRAND,
GROUPING(SEGMENT) GROUPING_SEGMENT,
BRAND,
SEGMENT,
SUM(QUANTITY)
FROM
SALES
GROUP BY
GROUPING SETS
(
(BRAND,SEGMENT),
(BRAND),
(SEGMENT),
()
)
ORDER BY BRAND,SEGMENT
GROUPING 함수는 매우 유용한 함수 입니다.
해당 컬럼이 집계에 사용되었으면 0, 그렇지 않으면 1을 리턴 합니다.
- 좀더 보기쉽게 가공하여 조회하기
SELECT
CASE
WHEN GROUPING(BRAND) = 0 AND GROUPING(SEGMENT) = 0 THEN '브랜드별+등급별'
WHEN GROUPING(BRAND) = 0 AND GROUPING(SEGMENT) = 1 THEN '브랜드별'
WHEN GROUPING(BRAND) = 1 AND GROUPING(SEGMENT) = 0 THEN '등급별'
WHEN GROUPING(BRAND) = 1 AND GROUPING(SEGMENT) = 1 THEN '전체집계'
ELSE ''
END AS "집계기준",
BRAND,
SEGMENT,
SUM(QUANTITY)
FROM
SALES
GROUP BY
GROUPING SETS ( (BRAND,
SEGMENT),
(BRAND),
(SEGMENT),
() )
ORDER BY
BRAND,
SEGMENT
직관적으로 확인할 수 있어 훨씬 이해하기 쉽게 CASE문을 활용하여 작성합니다.
'PostgreSQL > 조인과 집계 데이터' 카테고리의 다른 글
PostgreSQL CUBE 절 (0) | 2019.11.09 |
---|---|
PostgreSQL ROLL UP절 (0) | 2019.11.09 |
PostgreSQL HAVING 절 (0) | 2019.11.05 |
PostgreSQL GROUP BY 절 (0) | 2019.11.05 |
PostgreSQL NATURAL 조인 (0) | 2019.11.05 |