티스토리 뷰

반응형

사실 숫자의 누계를 만든다는 것은 다양한 방법이 있으며

여기서 소개하는 방법만이 옳다는 것이 아님을 밝혀둔다.

다만 sql문을 다양하게 작성 해 볼수 있다는 것과

여러가지 상황에 맞게 사용할 수 있도록 익혀 둔다면 나중에 어디서 써먹을 수도 있기에

이것도 좋겠다 싶어 간단히 포스팅 해보기로 한다.

우선 다음과 같은 테이블에 데이터가 있다고 가정해 보자.

select 'a' as alpha, '1' as i -- alpha 컬럼은 별 의미없음...
into #tmpTbl2

insert #tmpTbl2 values('b', '2')
insert #tmpTbl2 values('c', '3')
insert #tmpTbl2 values('d', '4')
insert #tmpTbl2 values('e', '5')
insert #tmpTbl2 values('f', '6')
insert #tmpTbl2 values('g', '7')

이 때 다음 결과와 같이 i컬럼의 누계와 i컬럼의 합계 (i = i+누계) 를 구하고자 한다.


물론 생각나는 여러가지 방법이 있을 수 있고 결과가 동일하다면 어떤 것도 정답이 될 수 있다.

그리고 나는 이런 방식의 쿼리로 같은 결과를 한 번 내보았다.


select a.*, sum(cast(b.i as int)) as '누계' from #tmpTbl2 a left join #tmpTbl2 b on a.i >= b.i group by a.alpha, a.i order by a.alpha, a.i

a테이블의 i컬럼과 b테이블에 있는 i컬럼을 on절에서 비교하여 join한 결과에서

b테이블의 i컬럼을 sum한 것.

이렇게 하면 다음과 같이 위에서 원하는 결과를 얻을 수 있다.

 alpha	i	누계
a	1	1
b	2	3
c	3	6
d	4	10
e	5	15
f	6	21
g	7	28

응용해서

만약에 반대로 a테이블의 i컬럼을 sum하게 되면 어떤 결과가 나올까?

그건 직접 해보는 것을 추천한다.

그리고 왜 그런 결과가 나오는지도 한번 생각해 보기 바란다.


반응형
댓글
반응형
05-17 05:57
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함