슬슬 그룹에 대해서 이해 갈 듯 말듯 머리도 아프지만 재밌기도 하고.. 0 2 536

by 권오창 [2019.03.14 18:00:16]


박스2의 데이터를 만들어 내야는데요

이걸 어떻게 해야할지 모르겠습니다. 음 제가 생각해본바로는 강아지와 고양이의 그룹으로

즉 이전 그룹의 최대값을 가지고 와서 BOX1의값+이전그룹최대값으로 더하면 될 듯해서

LAG()를 써서 가져올려 해보았으나 힘드네요...

도움 부탁드립니다. DB책을 사서 공부하는데 저런 문제가 있어서요

 

이름 LV1 LV2 LV3 EA BOX1 BOX2
강아지 1 1 1 30 1 1
강아지 1 2 2 60 1 1
강아지 1 3 3 90 2 2
강아지 1 4 4 120 2 2
강아지 1 5 5 150 3 3
강아지 1 6 6 180 3 3
강아지 1 7 7 210 4 4
강아지 1 8 8 240 4 4
강아지 1 9 9 270 5 5
강아지 1 10 10 300 5 5
고양이 2 1 11 2 1 6
고양이 2 2 12 4 1 6
고양이 2 3 13 6 1 6
고양이 2 4 14 8 2 7
고양이 2 5 15 10 2 7
고양이 2 6 16 12 2 7
고양이 2 7 17 14 3 8
고양이 2 8 18 16 3 8
고양이 2 9 19 18 3 8
고양이 2 10 20 20 4 9
고양이 2 11 21 22 4 9
고양이 2 12 22 24 4 9
고양이 2 13 23 26 5 10
고양이 2 14 24 28 5 10
고양이 2 15 25 30 5 10
by 신이만든지기 [2019.03.14 18:49:06]

with t( lv, box1) as (
select 1, 1 from dual union all
select 1, 1 from dual union all
select 1, 2 from dual union all
select 1, 2 from dual union all
select 2, 1 from dual union all
select 2, 1 from dual union all
select 2, 1 from dual union all
select 2, 2 from dual union all
select 2, 2 from dual
)
SELECT LV, BOX1
     , DENSE_RANK() OVER(ORDER BY LV ASC, BOX1 ASC) BOX2
 FROM T

오라클 함수를 이용했습니다.


by inbeater [2019.03.14 21:35:35]
with t1 as ( 
select '강아지' name, 	1	lv1, 1	lv2, 1	lv3, 30	 ea, 1	box1, 1  box2 from dual union all
select '강아지' name, 	1	lv1, 2	lv2, 2	lv3, 60	 ea, 1	box1, 1  box2 from dual union all
select '강아지' name, 	1	lv1, 3	lv2, 3	lv3, 90	 ea, 2	box1, 2  box2 from dual union all
select '강아지' name, 	1	lv1, 4	lv2, 4	lv3, 120 ea, 	2	box1, 2  box2 from dual union all
select '강아지' name, 	1	lv1, 5	lv2, 5	lv3, 150 ea, 	3	box1, 3  box2 from dual union all
select '강아지' name, 	1	lv1, 6	lv2, 6	lv3, 180 ea, 	3	box1, 3  box2 from dual union all
select '강아지' name, 	1	lv1, 7	lv2, 7	lv3, 210 ea, 	4	box1, 4  box2 from dual union all
select '강아지' name, 	1	lv1, 8	lv2, 8	lv3, 240 ea, 	4	box1, 4  box2 from dual union all
select '강아지' name, 	1	lv1, 9	lv2, 9	lv3, 270 ea, 	5	box1, 5  box2 from dual union all
select '강아지' name, 	1	lv1, 10	lv2, 10	lv3, 300 ea, 	5	box1, 5  box2 from dual union all
select '고양이' name, 	2	lv1, 1	lv2, 11	lv3, 2	 ea, 1	box1, 6  box2 from dual union all
select '고양이' name, 	2	lv1, 2	lv2, 12	lv3, 4	 ea, 1	box1, 6  box2 from dual union all
select '고양이' name, 	2	lv1, 3	lv2, 13	lv3, 6	 ea, 1	box1, 6  box2 from dual union all
select '고양이' name, 	2	lv1, 4	lv2, 14	lv3, 8	 ea, 2	box1, 7  box2 from dual union all
select '고양이' name, 	2	lv1, 5	lv2, 15	lv3, 10	 ea, 2	box1, 7  box2 from dual union all
select '고양이' name, 	2	lv1, 6	lv2, 16	lv3, 12	 ea, 2	box1, 7  box2 from dual union all
select '고양이' name, 	2	lv1, 7	lv2, 17	lv3, 14	 ea, 3	box1, 8  box2 from dual union all
select '고양이' name, 	2	lv1, 8	lv2, 18	lv3, 16	 ea, 3	box1, 8  box2 from dual union all
select '고양이' name, 	2	lv1, 9	lv2, 19	lv3, 18	 ea, 3	box1, 8  box2 from dual union all
select '고양이' name, 	2	lv1, 10	lv2, 20	lv3, 20	 ea, 4	box1, 9  box2 from dual union all
select '고양이' name, 	2	lv1, 11	lv2, 21	lv3, 22	 ea, 4	box1, 9  box2 from dual union all
select '고양이' name, 	2	lv1, 12	lv2, 22	lv3, 24	 ea, 4	box1, 9  box2 from dual union all
select '고양이' name, 	2	lv1, 13	lv2, 23	lv3, 26	 ea, 5	box1, 10 box2 from dual union all
select '고양이' name, 	2	lv1, 14	lv2, 24	lv3, 28	 ea, 5	box1, 10 box2 from dual union all
select '고양이' name, 	2	lv1, 15	lv2, 25	lv3, 30	 ea, 5	box1, 10 box2 from dual
)


select name, lv1, box1, dense_rank() over (order by lv1, box1)
from t1 ;

와 신이만든지기님..... 제가 만들다가..... 어떤 연관관계가 있는지 보다보니.. 닥 님이 보신 연관 관계 였네요 대단하십니다.

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