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가지를 유니온을했구요 여기 세가지 테이블 의 값을 가공해서 중복제거하고 롤업으로 참여자수 총합 당첨자수 총합 비중과 당첨율을 구할수잇을까요
지역 응모자 당첨자 비중 당첨율
경기 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%
지금값이 각각나옵니다 여기있는것을 지역별끼리 총 응모자와 당첨자 합산결과가 중복되지 않게 나오고 지 비중이랑 당첨률도 롤업해서 만들고 싶어요 ㅜㅜ
제 답글 중 질문의 구문과 다른 구문은 충분히 그럴만한 이유가 있어서 개선한 것입니다.
다시 원래대로 돌리지 마세요.
질문 하실때마다 계속 원래대로 돌려서 질문하시네요.
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) ;