반응형
여차저차 하여 비율에 따라 그룹의 합을 구하고
각각 그룹의 금액 * 비율 한 금액의 합을 구하는데 그 총계만 가져와야 할 일이 생겼었다.
비율 금액
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
어떤 데이터를 일괄로 수정하기 위해서 나온 것 이다.
헛짓한 부분도 있지만 이런식으로 사용이 가능하다는 것도 알아두면 언젠가는 써먹을 날이...
반응형
댓글