유니온 3개를 해서 데이터값을 가공? 0 4 663

by 스티브1조 [2018.03.08 17:46:23]


SELECT          
  CASE GROUPING(areaInfo) WHEN 1 THEN '총인원' ELSE  (areaInfo)  END as areaInfo
                ,TO_CHAR(SUM(reqCnt),'999,999') reqCnt
                ,TO_CHAR(SUM(winCnt),'999,999') winCnt
                , CONCAT(TRIM('.' FROM TO_CHAR(ROUND(RATIO_TO_REPORT(SUM(winCnt)) OVER(PARTITION BY GROUPING(areaInfo))*100,2),'fm990.99')),'%') AS winAvg
                , CONCAT(TRIM('.' FROM TO_CHAR(ROUND((SUM(winCnt)/SUM(reqCnt))*100,2),'fm990.99')),'%') ageAvg
                
  FROM (SELECT   (EVT_REQ_CNT) reqCnt
                ,(EVT_WIN_CNT) winCnt
             , CASE WHEN area = '서울' THEN area
                    WHEN area = '경기' THEN area
                     WHEN area = '인천' THEN area
                    WHEN area = '강원' THEN area
                    WHEN area = '충북' THEN area
                     WHEN area = '세종' THEN area
                    WHEN area = '충남' THEN area
                    WHEN area = '대전' THEN area
                     WHEN area = '경북' THEN area
                    WHEN area = '대구' THEN area
                    WHEN area = '울산' THEN area
                    WHEN area = '부산' THEN area
                    WHEN area = '경남' THEN area
                    WHEN area = '전북' THEN area
                    WHEN area = '전남' THEN area
                    WHEN area = '광주' THEN area
                    WHEN area = '제주' THEN area
                END AS areaInfo
          FROM SUMMARY_BTPOINT
     
        ) a
 GROUP BY ROLLUP(areaInfo)
 
 union all
SELECT          
  CASE GROUPING(areaInfo) WHEN 1 THEN '총인원' ELSE  (areaInfo)  END as areaInfo
                ,TO_CHAR(SUM(R1+R2+R3),'999,999') reqCnt
                ,TO_CHAR(SUM(W1+W2+W3),'999,999') winCnt
                , CONCAT(TRIM('.' FROM TO_CHAR(ROUND(RATIO_TO_REPORT(SUM(W1+W2+W3)) OVER(PARTITION BY GROUPING(areaInfo))*100,2),'fm990.99')),'%') AS winAvg
                , CONCAT(TRIM('.' FROM TO_CHAR(ROUND((SUM(W1+W2+W3)/SUM(R1+R2+R3))*100,2),'fm990.99')),'%') ageAvg
                
  FROM (SELECT     EVT_REQ_CNT1 R1
                 , EVT_WIN_CNT1 W1 
                ,  EVT_REQ_CNT2 R2
                ,  EVT_WIN_CNT2 W2
                ,  EVT_REQ_CNT3 R3
               ,   EVT_WIN_CNT3 W3
             , CASE WHEN area = '서울' THEN area
                    WHEN area = '경기' THEN area
                     WHEN area = '인천' THEN area
                    WHEN area = '강원' THEN area
                    WHEN area = '충북' THEN area
                     WHEN area = '세종' THEN area
                    WHEN area = '충남' THEN area
                    WHEN area = '대전' THEN area
                     WHEN area = '경북' THEN area
                    WHEN area = '대구' THEN area
                    WHEN area = '울산' THEN area
                    WHEN area = '부산' THEN area
                    WHEN area = '경남' THEN area
                    WHEN area = '전북' THEN area
                    WHEN area = '전남' THEN area
                    WHEN area = '광주' THEN area
                    WHEN area = '제주' THEN area
                END AS areaInfo
          FROM SUMMARY_APRILBOX
     
        ) a
 GROUP BY ROLLUP(areaInfo)

 union all
 SELECT          
  CASE GROUPING(areaInfo) WHEN 1 THEN '총인원' ELSE  (areaInfo)  END as areaInfo
                ,TO_CHAR(SUM(reqCnt),'999,999') reqCnt
                ,TO_CHAR(SUM(winCnt),'999,999') winCnt
                , CONCAT(TRIM('.' FROM TO_CHAR(ROUND(RATIO_TO_REPORT(SUM(winCnt)) OVER(PARTITION BY GROUPING(areaInfo))*100,2),'fm990.99')),'%') AS winAvg
                , CONCAT(TRIM('.' FROM TO_CHAR(ROUND((SUM(winCnt)/SUM(reqCnt))*100,2),'fm990.99')),'%') ageAvg
                
  FROM (SELECT   (EVT_REQ_CNT) reqCnt
                ,(EVT_WIN_CNT) winCnt
             , CASE WHEN area = '서울' THEN area
                    WHEN area = '경기' THEN area
                     WHEN area = '인천' THEN area
                    WHEN area = '강원' THEN area
                    WHEN area = '충북' THEN area
                     WHEN area = '세종' THEN area
                    WHEN area = '충남' THEN area
                    WHEN area = '대전' THEN area
                     WHEN area = '경북' THEN area
                    WHEN area = '대구' THEN area
                    WHEN area = '울산' THEN area
                    WHEN area = '부산' THEN area
                    WHEN area = '경남' THEN area
                    WHEN area = '전북' THEN area
                    WHEN area = '전남' THEN area
                    WHEN area = '광주' THEN area
                    WHEN area = '제주' THEN area
                END AS areaInfo
          FROM SUMMARY_SCRATCH
          
        ) a
 GROUP BY ROLLUP(areaInfo)


지금 3가지를 유니온을했구요
여기 세가지 테이블 의 값을 가공해서 중복제거하고 롤업으로 참여자수 총합 당첨자수 총합  비중과 당첨율을 구할수잇을까요

 

by 마농 [2018.03.08 17:52:52]

원하시는 결과표를 보여주세요.


by 스티브1조 [2018.03.08 18:01:12]

 

지역       응모자     당첨자   비중       당첨율

경기       7,200       2,880    33.33%    40%
부산       8,685       4,320    50%      49.74%
서울       8,038       1,440    16.67%    17.91%
총인원      23,923       8,640    100%    36.12%
경기      25,662       1,057    8.55%    4.12%
경남      22,849         430    3.48%    1.88%
경북      21,137         820    6.63%    3.88%
광주      16,190         430    3.48%    2.66%
대구      30,584         670    5.42%    2.19%
대전      33,749         796    6.44%    2.36%
부산      42,617         963    7.79%    2.26%
서울      52,891         959    7.75%    1.81%
세종      21,828         820    6.63%    3.76%
울산      33,557         430    3.48%    1.28%
전남      41,885       1,490    12.05%    3.56%
전북      40,939       1,200    9.7%    2.93%
충남      40,714       1,017    8.22%    2.5%
충북      29,466       1,287    10.41%    4.37%
총인원     454,068      12,369    100%    2.72%
경기      33,955         368    15.62%    1.08%
경남       2,503          70    2.97%    2.8%
경북       7,507          70    2.97%    0.93%
광주         394          42    1.78%    10.66%
대구         608          58    2.46%    9.54%
대전       5,909         102    4.33%    1.73%
부산      44,805         545    23.13%    1.22%
서울      25,717         754    32%    2.93%
세종         253          46    1.95%    18.18%
울산       1,272          51    2.16%    4.01%
전남       4,420          42    1.78%    0.95%
전북         894          74    3.14%    8.28%
충남       2,564          70    2.97%    2.73%
충북         971          64    2.72%    6.59%
총인원     131,772       2,356    100%    1.79%

 

 

지금값이 각각나옵니다   여기있는것을   지역별끼리 총 응모자와 당첨자 합산결과가 중복되지 않게  나오고 지 비중이랑 당첨률도 롤업해서 만들고 싶어요 ㅜㅜ 


by 마농 [2018.03.08 18:14:41]

제 답글 중 질문의 구문과 다른 구문은 충분히 그럴만한 이유가 있어서 개선한 것입니다.
다시 원래대로 돌리지 마세요.
질문 하실때마다 계속 원래대로 돌려서 질문하시네요.
1. 복잡한 Case 문은
  - 결국은 그냥 area 와 같습니다.
2. TO_CHAR(ROUND 에서 ROUND 를 제거한 이유는
  - 어차피 TO_CHAR 가 ROUND 를 해주기 때문입니다.
3. TRIM 을 RTRIM 으로 바꾼 이유는
  - 코드가 더 간결하기 때문입니다.
4. CONCAT 를 || 로 바꾼 이유는
  - 코드가 더 간결하기 때문입니다.
 

SELECT NVL(area, '총인원') areaInfo
     , TO_CHAR(SUM(reqCnt), '999,999') reqCnt
     , TO_CHAR(SUM(winCnt), '999,999') winCnt
     , RTRIM(TO_CHAR(
       RATIO_TO_REPORT(SUM(winCnt)) OVER(PARTITION BY GROUPING(area)) * 100
       , 'fm990.99'), '.') || '%' winAvg
     , RTRIM(TO_CHAR(SUM(winCnt) / SUM(reqCnt) * 100, 'fm990.99'), '.') || '%' areaAvg
  FROM (SELECT area
             , evt_req_cnt reqCnt
             , evt_win_cnt winCnt
          FROM summary_btpoint
         UNION ALL
        SELECT area
             , evt_req_cnt1 + evt_req_cnt2 + evt_req_cnt3 reqCnt
             , evt_win_cnt1 + evt_win_cnt2 + evt_win_cnt3 winCnt
          FROM summary_aprilbox
         UNION ALL
        SELECT area
             , evt_req_cnt reqCnt
             , evt_win_cnt winCnt
          FROM summary_scratch
        )
 GROUP BY ROLLUP(area)
;

 


by 스티브1조 [2018.03.08 19:02:08]

감사합니다 바이 그룹핑 만 area 로바뀌니깐 잘됩니다 너무감사해요 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입