태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

여차저차 하여 비율에 따라 그룹의 합을 구하고
각각 그룹의 금액 * 비율 한 금액의 합을 구하는데 그 총계만 가져와야 할 일이 생겼었다.

비율 금액
10   100
10   200
10   300
20   100
20   300


이런 데이터라면

10   600
20   400

이렇게 그룹이 지어지고

600 * 0.1 = 60
400 * 0.2 = 80

요거의 합 60 + 80 = 140 이렇게 나와야 하는 경우다.
혹자는 이렇게 의문을 가질 수도 있다.
각각의 비율 금액을 계산해서 걍 더하면 되지 않느냐고..??
좋다. 근데 이게 소수점을 안 가지고 있고 절사 금액 이라면 1, 10 단위의 오차가 발생한다.

뭐... 어떤 용도로 사용하고 계산법은 어떻게 나와야 하느냐에 따른 문제지만
참 거지 같다 -_-

그래서 이런 쿼리가 나왔다.

-- 그룹된 것들의 비율 금액의 합계만 보기
select decode(grouping(c.rate), 1, round(sum(c.amt * c.rate / 100), 0))
  from table_1 t
     , table_2 c
 where t.col1 = c.col1
 group by rollup(c.rate)
 having grouping(c.rate) = 1

어떤 데이터를 일괄로 수정하기 위해서 나온 것 이다.
헛짓한 부분도 있지만 이런식으로 사용이 가능하다는 것도 알아두면 언젠가는 써먹을 날이...

+ Recent posts