안녕하세요!
다름이 아니라 전체 매출액 대비 결제액에 대한 비중을 백분율로 나타내고 싶은데 RATIO_TO_REPORT 함수를 이렇게 쓰는게 맞을까요?
또한 백분율 갑이 .9로 나왔을 경우 앞자리에 0을 붙여 넣고 싶은데 이 부분은 잘 못하겠습니다 ㅜㅜ
결과는 이렇게 표현하고 싶습니다
|서비스 코드|결제 수단 코드| 결제액 | 비중 |
| 1003 | 1 | 1000 | 10.31 |
| 1003 | 1 | 1000 | 0.9 |
-- 전체 매출 대비 결제액 비중 -- PAY_WAY_CD : 결제 수단, SLS_PRC : 결제액 WITH T1 AS ( SELECT '1003' AS SVR_TP_CD, '1' AS PAY_WAY_CD, '1000' AS SLS_PRC FROM dual UNION ALL SELECT '1003' AS SVR_TP_CD, '2' AS PAY_WAY_CD, '2700' AS SLS_PRC FROM dual UNION ALL SELECT '1003' AS SVR_TP_CD, '2' AS PAY_WAY_CD, '1200' AS SLS_PRC FROM dual UNION ALL SELECT '1003' AS SVR_TP_CD, '3' AS PAY_WAY_CD, '2300' AS SLS_PRC FROM dual UNION ALL SELECT '1003' AS SVR_TP_CD, '4' AS PAY_WAY_CD, '2500' AS SLS_PRC FROM dual ) SELECT SVR_TP_CD , PAY_WAY_CD , SUM(SLS_PRC) AS SLS_PRC , ROUND(RATIO_TO_REPORT(SUM(SLS_PRC)) OVER() *100, 2) AS RAT /* 비중 */ FROM T1 GROUP BY SVR_TP_CD, PAY_WAY_CD;
1. RATIO_TO_REPORT 사용법 맞습니다.
2. 숫자 표현은 사용환경에 따라 다르게 표시될 수 있습니다.
- 0 을 굳이 붙여야 한다면 to_char 함수로 포멧을 지정하는 방안이 있습니다.
- 주의 : 출력 결과의 자료형은 숫자가 아닌 문자가 됩니다.
- 비율은 소수점 이하 고정자리수로 보여주는게 보기 좋을 듯 합니다.
WITH t1 AS ( SELECT '1003' svr_tp_cd, '1' pay_way_cd, 1000 sls_prc FROM dual UNION ALL SELECT '1003', '2', 2700 FROM dual UNION ALL SELECT '1003', '2', 1200 FROM dual UNION ALL SELECT '1003', '3', 2300 FROM dual UNION ALL SELECT '1003', '4', 2500 FROM dual UNION ALL SELECT '1003', '5', 98 FROM dual UNION ALL SELECT '1003', '6', 10 FROM dual ) SELECT svr_tp_cd , pay_way_cd , SUM(sls_prc) sls_prc , ROUND(RATIO_TO_REPORT(SUM(sls_prc)) OVER() * 100, 2) rat , TO_CHAR(RATIO_TO_REPORT(SUM(sls_prc)) OVER() * 100, 'FM990.00') rat_1 -- 고정자리수 , RTRIM(TO_CHAR(RATIO_TO_REPORT(SUM(sls_prc)) OVER() * 100, 'FM990.99'), '.') rat_2 -- 가변자리수 FROM t1 GROUP BY svr_tp_cd, pay_way_cd ORDER BY svr_tp_cd, pay_way_cd ;