🧁각 그룹 함수 별 특징
- ROLL UP : 순차적으로 중간 합계(소계)를 계산한 후 총합계를 계산한다.(지정된 열의 순서 결과에 영향 O)
- CUBE : 가능한 모든 조합의 집계를 계산한다.(지정된 열의 순서 결과에 영향 X)
- GROUPING SETS : 그룹화할 컬럼을 직접 지정함
🍥사용 예시
✅Test Table
상품별 판매월과 판매가격을 저장하기 위한 테이블을 생성해주었다.
CREATE TABLE 판매_2024(
상품_id integer PRIMARY KEY,
이름 varchar2(20),
판매월 integer,
가격 integer
);
INSERT INTO 판매_2024 VALUES (1,'LCD-TV',1,'50000');
INSERT INTO 판매_2024 VALUES (2,'에어프라이어',1,'30000');
INSERT INTO 판매_2024 VALUES (3,'LCD-TV',1,'48000');
INSERT INTO 판매_2024 VALUES (4,'LCD-TV',2,'50000');
INSERT INTO 판매_2024 VALUES (5,'노트북',3,'60000');
INSERT INTO 판매_2024 VALUES (6,'에어프라이어',3,'25000');
INSERT INTO 판매_2024 VALUES (7,'캡슐커피',4,'25000')
✅ROLL UP()
ROLLUP은 지정한 컬럼의 소계와 총계를 반환한다.
예제로 확인해보면,
아래 SQL문은 같은 이름을 가진 상품의 판매개수를 count 함수로 세는 쿼리이다.
마지막 행을 확인 해보면 이름으로 묶인 상품들의 총계를 확인할 수 있다.
SELECT 이름,count(이름) AS 판매량 FROM 판매_2024 GROUP BY ROLLUP(이름);
컬럼을 추가하여 그룹별 소계와 총계를 확인하는 방법도 있는데
아래 쿼리는 상품의 이름과 판매월로 그룹화하여 상품의 판매량을 구하는 쿼리이다!
결과를 확인해보면
상품의 월별 판매량을 구하고
각 상품의 월별 소계를 반환한 뒤
전체 상품 판매 갯수를 마지막 행에 반환하는 것을 확인할 수 있다.
SELECT 이름,판매월,count(이름) AS 판매량 FROM 판매_2024 GROUP BY ROLLUP(이름,판매월);
ROLL UP을 사용하기 위해서 주의할 점이 있는데 ROLL UP뒤에 오는 컬럼의 순서가 변경되면 결과에 영향을 준다는 것이다.
예를 들어 위 예제에서 컬럼의 순서를 바꿔주면 아래와 같은 결과를 반환하는데
둘의 차이는
상품의 월별 판매량에서 월별 상품 판매량으로 결과가 변경되는 것이다!
SELECT 이름,판매월,count(이름) AS 판매량 FROM 판매_2024 GROUP BY ROLLUP(판매월,이름);
✅CUBE()
cube는 모든 경우의 수의 계산을 하는 그룹함수이다.
따라서 컬럼의 순서가 결과에 영향을 주지 않는다.
예시를 통해 확인을 해보면 ROLL UP 테스트 한 예제를 모두 합한 결과를 반환하는 것을 확인할 수 있다.
SELECT 이름,판매월,count(이름) AS 판매량 FROM 판매_2024 GROUP BY CUBE(이름,판매월);
✅GROUPING SETS()
grouping sets는 사용자가 직접 순서를 지정하는 함수이며 총계 또한 출력하기 원한다면 사용자가 직접 지정하여 출력해야한다!
예시를 통해 확인해보면 결과에서 총계를 확인할 수 없고 상품별,월별 소계만을 확인 할 수 있다.
SELECT 이름,판매월,count(이름) AS 판매량 FROM 판매_2024 GROUP BY GROUPING SETS(판매월,이름);
만약 총계를 확인하고 싶다면 ()를 추가해주어야 한다
SELECT 이름,판매월,count(이름) AS 판매량 FROM 판매_2024 GROUP BY GROUPING SETS(판매월,이름,());
'📚 DataBase' 카테고리의 다른 글
[ORACLE] GROUP BY,HAVING (0) | 2024.03.11 |
---|---|
[MySQL/ORACLE/MSSQL] DBMS별 결과 값 제한 방법 (0) | 2023.11.15 |
0911 (0) | 2023.09.11 |
[DB] JOIN 정리(INNER/LEFT/RIGHT/OUTER) (0) | 2023.09.08 |
Oracle과 MySQL 뭘 사용해야 할까? (0) | 2023.09.05 |