Oracle Count로 구해 온 값 백분율 계산하는 쿼리 질문 드립니다. 0 2 5,918

by 재동이_김재훈 오라클 count percent [2016.10.21 12:39:29]


기존 DB에서 데이터를 가져올 때 사용하던 쿼리는
 
SELECT BIZ_DIV, COUNT(*) AS BIZ_CNT
FROM
           (
            SELECT A.BIZ_ ID, A.BIZ_DIV
            FROM BIZ A
            WHERE A.BIZ_ID IS NOT NULL
            AND A.DEL_FLAG = 'n'
            )
GROUP BY ROLLUP(BIZ_DIV)
 
이렇게 가져오고 있습니다.
 
결과 값은 
 
BIZ_DIV | BIZ_CNT
10          | 239
 
 
20          | 18
 
 
30          | 1
 
 
40          | 11
 
 
              | 239
 
이렇게 가져오고 있습니다.
 
기존에는 이 값을 비즈니스 로직을 통해 백분율을 구했었는데
그냥 쿼리에서 백분율을 계산하여 가져오고 싶습니다.
 
제가 쿼리는 완전 초짜라 이것 저것 찾아보고 시도는 하고 있는데 막막하네요
 
원하는 형태는
 
BIZ_DIV | BIZ_CNT | BIZ_PERC   
10          | 239          | 88.8%
 
 
20          | 18            | 6.7&
 
 
30          | 1              | 0.4%
 
 
40          | 11            | 4.1%
 
 
              | 239
 
이런 형태로 가져오고 싶습니다.
 
기초적인 질문인 것 같은데 고수님들의 도움을 요청드립니다.....
 
 
by Dev03 [2016.10.21 13:27:42]
SELECT BIZ_DIV, COUNT(*) AS BIZ_CNT
        , ROUND(COUNT(*)/TOT_CNT*100, 1) AS BIZ_PERC
FROM
           (
            SELECT A.BIZ_ ID, A.BIZ_DIV, COUNT(*) OVER() AS TOT_CNT
            FROM BIZ A
            WHERE A.BIZ_ID IS NOT NULL
            AND A.DEL_FLAG = 'n'
            )
GROUP BY ROLLUP((BIZ_DIV, TOT_CNT))

by 마농 [2016.10.21 15:23:01]
SELECT a.biz_div
     , COUNT(*) biz_cnt
     , ROUND(
       RATIO_TO_REPORT(COUNT(*)) OVER(PARTITION BY GROUPING(a.biz_div))
       * 100, 1) biz_pct
  FROM biz a
 WHERE a.biz_id IS NOT NULL
   AND a.del_flag = 'n'
 GROUP BY ROLLUP(a.biz_div)
;

 

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