본문 바로가기
DB활용

[오라클 그룹쿼리] GROUP BY GROUPING SETS 활용하기

by 황금웃음만두 2020. 1. 9.

GROUP BY GROUPING SETS을 활용하여 여러 그룹대상을 다르게 하여 산출한 여러 장표를 붙이는 예제를 통해 설명하는 포스팅입니다

 

 

샘플데이터 부터 먼저 만들어봅시다

 

코드테이블과 연습용 집계테이블을 생성합니다

 

연습용 집계테이블은

 

다른 국가에서 우리나라 시도에 얼마나 방문했는지 일자별로 기록한 테이블이라는 내용으로 구성하였습니다

 

/* 코드테이블 생성 */

CREATE TABLE EXER_CMMN_CODE (
  CODE_GROUP    CHAR(20 )              NULL, 
  CODE          VARCHAR2(8 )           NULL, 
  CODE_NM       VARCHAR2(100)         NULL
  CODE_NM_ODERED VARCHAR2(100)
);


/* 연습용 테이블 생성 */

CREATE TABLE EXER_GROUPING_SETS (
  방문국가코드    VARCHAR2(20)         NULL, 
  방문시도코드    VARCHAR2(20)         NULL, 
  방문일자      VARCHAR2(10)         NULL, 
  방문자수      NUMBER                    NULL
);

 

 

 

코드테이블에 입력할 샘플데이터 입니다

국가코드와 시도코드를 정의하였습니다

INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('SIDO','01','서울','01_서울');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('SIDO','02','부산','02_부산');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('SIDO','03','대구','03_대구');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('SIDO','04','인천','04_인천');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('SIDO','05','광주','05_광주');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('SIDO','06','대전','06_대전');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('SIDO','07','울산','07_울산');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('SIDO','08','세종','08_세종');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('SIDO','09','경기','09_경기');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('SIDO','10','강원','10_강원');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('SIDO','11','충북','11_충북');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('SIDO','12','충남','12_충남');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('SIDO','13','전북','13_전북');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('SIDO','14','전남','14_전남');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('SIDO','15','경북','15_경북');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('SIDO','16','경남','16_경남');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('SIDO','17','제주','17_제주');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','01','가이아나','01_가이아나');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','02','감비아','02_감비아');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','03','기니','03_기니');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','04','기니비사우','04_기니비사우');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','05','니카라과','05_니카라과');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','06','덴마크','06_덴마크');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','07','레소토','07_레소토');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','08','루마니아','08_루마니아');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','09','말레이시아','09_말레이시아');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','10','말리','10_말리');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','11','멕시코','11_멕시코');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','12','모나코','12_모나코');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','13','모로코','13_모로코');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','14','몽골','14_몽골');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','15','미국','15_미국');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','16','미크로네시아 연방','16_미크로네시아 연방');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','17','방글라데시','17_방글라데시');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','18','베냉','18_베냉');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','19','보스니아 헤르체고비나','19_보스니아 헤르체고비나');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','20','보츠와나','20_보츠와나');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','21','북한','21_북한');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','22','상투메 프린시페','22_상투메 프린시페');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','23','세르비아','23_세르비아');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','24','세인트빈센트 그레나딘','24_세인트빈센트 그레나딘');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','25','세인트키츠 네비스','25_세인트키츠 네비스');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','26','슬로바키아','26_슬로바키아');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','27','시에라리온','27_시에라리온');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','28','아르헨티나','28_아르헨티나');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','29','아프가니스탄','29_아프가니스탄');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','30','앤티가 바부다','30_앤티가 바부다');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','31','에리트레아','31_에리트레아');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','32','에콰도르','32_에콰도르');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','33','우간다','33_우간다');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','34','이라크','34_이라크');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','35','이탈리아','35_이탈리아');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','36','인도','36_인도');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','37','인도네시아','37_인도네시아');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','38','조지아','38_조지아');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','39','중국','39_중국');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','40','지부티','40_지부티');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','41','짐바브웨','41_짐바브웨');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','42','체코','42_체코');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','43','카보베르데','43_카보베르데');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','44','캐나다','44_캐나다');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','45','콩고 민주 공화국','45_콩고 민주 공화국');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','46','크로아티아','46_크로아티아');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','47','키르기스스탄','47_키르기스스탄');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','48','키프로스','48_키프로스');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','49','태국','49_태국');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','50','통가','50_통가');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','51','투발루','51_투발루');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','52','파나마','52_파나마');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','53','파라과이','53_파라과이');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','54','파키스탄','54_파키스탄');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','55','포르투갈','55_포르투갈');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','56','프랑스','56_프랑스');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','57','필리핀','57_필리핀');
INSERT INTO WORKOUT.EXER_CMMN_CODE (CODE_GROUP,CODE,CODE_NM,CODE_NM_ODERED) VALUES ('COUNTRY','58','헝가리','58_헝가리');
COMMIT;

 

샘플데이터를 입력합니다, 방문국가코드와 방문시도코드는 위 코드테이블을 참조하여 생성했습니다

/* 통계연습용 샘플데이터 */
 INSERT INTO EXER_GROUPING_SETS
 SELECT LPAD(TRUNC(DBMS_RANDOM.VALUE(1,58)),'2','0')  방문국가코드(01~57)
        ,LPAD(TRUNC(DBMS_RANDOM.VALUE(1,18)),'2','0')   방문시도코드(01~17)
        ,'2020-01-' || LPAD(TRUNC(DBMS_RANDOM.VALUE(1,31)),2,0)   방문일자(20200101 ~ 20200131)
        ,TRUNC(DBMS_RANDOM.VALUE(100,5000))   방문객( 100~5000명)
 FROM DUAL
 CONNECT BY LEVEL <=5000;/*샘플데이터 5000행*/
 
 COMMIT;

 

 

위 데이터를 모두 커밋했다면 

 

방문국가코드별, 방문시도코드별, 방문일자별 방문객수를 산출하도록 합니다

 

각각 통계를 내도 되지만 GROUP BY GROUPING SETS을 활용하여 한개의 쿼리로 추출하는 방식을 사용하였습니다

 

SELECT 방문국가코드
        ,방문시도코드 
        ,방문일자
        ,SUM(방문자수) 방문자수
         
FROM EXER_GROUPING_SETS
GROUP BY GROUPING SETS ((방문국가코드)
                         ,(방문시도코드)
                         ,(방문일자) 
                         ) 

코드로 출력되어 산출물로 출력하기 어려우므로 서브쿼리를 활용하여 코드테이블의 값으로 치환해주도록 합니다

SELECT (SELECT CODE_NM FROM EXER_CMMN_CODE WHERE CODE_GROUP='COUNTRY' AND CODE = 방문국가코드) 방문국가명
        ,(SELECT CODE_NM FROM EXER_CMMN_CODE WHERE CODE_GROUP='SIDO' AND CODE = 방문시도코드)  방문시도명
        ,방문일자
        ,SUM(방문자수) 방문자수
 
FROM EXER_GROUPING_SETS
GROUP BY GROUPING SETS (  (방문국가코드)
                          ,(방문시도코드)
                          ,(방문일자)
                         ) 
                         

방문국가별, 방문시도별, 방문일자별의 구분을 주고 싶을 경우 여러가지 방법이 있지만

 

예들들어 GROUPING_ID 함수를 사용할 수 있습니다. 다만 GROUPING SETS절이 달라지면 해당 함수의 결과값이 달라지는것을 주의하도록 합니다.

 

위 예 대신 아래 방법을 사용하면 쉽게 표현할 수 있습니다

 

GROUPING SETS 절에 집계그룹 맨 앞에 가상 값을 사용하는 방법입니다

 

통계 구분을 'A','B','C'로 구분지었으며 이는 그룹에 태그를 부여하는것과 동일합니다

 

그리고 태그를 활용하여 SELECT 절에 CASE문을 활용하여 통계를 구분지었습니다

 

SELECT CASE WHEN 'A' IS NOT NULL THEN '방문국가별'
            WHEN 'B' IS NOT NULL THEN '방문시도별'
            WHEN 'C' IS NOT NULL THEN '방문일자별'
            END 통계구분
            

        ,(SELECT CODE_NM FROM EXER_CMMN_CODE WHERE CODE_GROUP='COUNTRY' AND CODE = 방문국가코드) 방문국가명
        ,(SELECT CODE_NM FROM EXER_CMMN_CODE WHERE CODE_GROUP='SIDO' AND CODE = 방문시도코드)  방문시도명
        ,방문일자
        ,SUM(방문자수) 방문자수
 
 
 
 FROM EXER_GROUPING_SETS
 GROUP BY GROUPING SETS (  ('A', 방문국가코드)
                          ,('B', 방문시도코드)
                          ,('C', 방문일자)
                         ) 

 

GROUPING SETS을 활용하면 집계에 사용되는 칼럼을 한개로 합치는 예시입니다

 

통계 구분별로 출력되는 값을 구분지으면 깔끔하게 출력물을 만들 수 있습니다

 

SELECT CASE WHEN 'A' IS NOT NULL THEN '방문국가별'
            WHEN 'B' IS NOT NULL THEN '방문시도별'
            WHEN 'C' IS NOT NULL THEN '방문일자별'
            END 통계구분
      ,CASE WHEN 'A' IS NOT NULL THEN (SELECT CODE_NM FROM EXER_CMMN_CODE WHERE CODE_GROUP='COUNTRY' AND CODE = 방문국가코드)
            WHEN 'B' IS NOT NULL THEN (SELECT CODE_NM FROM EXER_CMMN_CODE WHERE CODE_GROUP='SIDO' AND CODE = 방문시도코드) 
            WHEN 'C' IS NOT NULL THEN 방문일자
            END 대상   

      ,SUM(방문자수) 방문자수
 
 
 
 FROM EXER_GROUPING_SETS
 GROUP BY GROUPING SETS (  ('A', 방문국가코드)
                          ,('B', 방문시도코드)
                          ,('C', 방문일자)
                         ) 

더 나아가서 아래와 같이 표현도 가능합니다

 

집계 그룹을 3개 'A-B','B-C','C-A' 추가하여 더 많은 그룹을 표현하였습니다

 

 

 

CASE 절에 가상값을 부여한 것을 'A' = 'A' 처럼 사용할 수 있습니다

'A' IS NOT NULL도 동시에 사용이 가능합니다.

 

대상1 칼럼에는 'A'='A' OR 'A-B' = 'A-B' 와 같이 두가지 경우의 수를 한 번에 처리할 수 있으므로, 쿼리를 간략하게 만들 수 있습니다

 

정렬을 위해 코드테이블의 정렬코드칼럼을 사용하였으며

 

ORDER BY로 정렬된 통계를 만들었습니다

 

 

SELECT * FROM
(            
SELECT CASE WHEN 'A' IS NOT NULL THEN 'A_방문국가별'
            WHEN 'B' IS NOT NULL THEN 'B_방문시도별'
            WHEN 'C' IS NOT NULL THEN 'C_방문일자별'
            WHEN 'A-B' IS NOT NULL THEN 'A-B_방문국가-방문시도별'
            WHEN 'B-C' IS NOT NULL THEN 'B-C_방문시도-방문일자별'
            WHEN 'C-A' IS NOT NULL THEN 'C-A_방문일자-방문국가별'
            END 통계구분
            
      ,CASE WHEN 'A'='A' OR 'A-B'='A-B' THEN (SELECT CODE_NM_ODERED FROM EXER_CMMN_CODE WHERE CODE_GROUP='COUNTRY' AND CODE = 방문국가코드)
            WHEN 'B'='B' OR 'B-C'='B-C' THEN (SELECT CODE_NM_ODERED FROM EXER_CMMN_CODE WHERE CODE_GROUP='SIDO' AND CODE = 방문시도코드) 
            WHEN 'C'='C' OR 'C-A'='C-A' THEN 방문일자
            END 대상1   
            
      ,CASE WHEN 'A-B' IS NOT NULL THEN (SELECT CODE_NM_ODERED FROM EXER_CMMN_CODE WHERE CODE_GROUP='SIDO' AND CODE = 방문시도코드) 
            WHEN 'B-C' IS NOT NULL THEN 방문일자
            WHEN 'C-A' IS NOT NULL THEN (SELECT CODE_NM_ODERED FROM EXER_CMMN_CODE WHERE CODE_GROUP='COUNTRY' AND CODE = 방문국가코드)  
            ELSE NULL
            END 대상2  

      ,SUM(방문자수) 방문자수
 
 
 
 FROM EXER_GROUPING_SETS
 GROUP BY GROUPING SETS (  ('A', 방문국가코드)
                          ,('A-B', 방문국가코드,방문시도코드)
                          ,('B', 방문시도코드)
                          ,('B-C', 방문시도코드,방문일자)
                          ,('C', 방문일자)
                          ,('C-A', 방문일자,방문국가코드)
                         )  
)
ORDER BY 통계구분, 대상1, 대상2

 

위 구문들을 직접 돌려보시고 엑셀로 추출하여 결과물이 어떻게 나왔는지 확인하시길 바랍니다

 

위 구문을 쓰면 결과가 어떻게 나오는지 익숙해지면 쿼리작성이 어렵지 않습니다

 

위 구문을 적절히 사용하여 원하는 보고서 형태로 만들기 바랍니다

 

 

 

이상으로 GROUP BY GROUPING SETS을 활용하는 포스팅을 마칩니다

댓글