픽스된 랭킹부터는 +1 0 13 2,445

by 이재현 [2011.10.18 19:50:06]


캡처.JPG (80,423Bytes)
캡처2.JPG (122,775Bytes)

음.. 첨엔 쉽게 생각했는데 쉽지 않더군요 ㅠ
by 마농 [2011.10.19 09:03:44]
음 설명도 없고...
데이터는 ... 으로 표시되어 어디까지 나와야 하는지도 모르겠고...
일단 단순하게 생각해 보면 tab2에서 Y 만 제거하면 tab3 가 나올듯 한데요...

by 이재현 [2011.10.19 09:58:31]


맞습니다.

by 이재현 [2011.10.19 10:05:08]
음.. 제가 설명을 어렵게 한건가요?? ㅠ

TAB1 : 랭크로 나온 데이타

TAB2 : 픽스된 랭크값

TAB3: TAB1에서 픽스된 랭크값을 제외하구 +1을 한값
TAB1.RN 1값은 TAB2.RN 1값은 픽스( 고정 된겂이니 ) 2로 랭크로
증가 시키고( TAB1.RN ) 나머지값두 순위가 밀려 + 1싞 해주고
9에서 증가하니 10은 픽스된값이라 11로 한다계 더 증가해야한다..



by 이재현 [2011.10.19 10:08:39]
데이타는 200개만 있음 됩니다.

by 마농 [2011.10.19 10:40:13]
설명이 어려운게 아니고 부족한거죠.

이렇게 하면 결과가 나올듯 한데요. 틀린 답인가요?
SELECT *
FROM tab2
WHERE fixyn IS NULL
;

200까지 가면 너무 많고
23에서 끊는다고 가정했을 때
즉, tab1 의 자료가 23까지 있고 tab2도 23까지 있을 때
결과물은 23까지 나와야 하나요? 25까지 나와야 하나요?

결과물이 위 tab3 와 같은 형태로만 나오면 되는건가요?
결과물을 tab1과 매치시켜서 나와야 하나요?
1 - 2
2 - 3
이런식으로 나와야 하는 건가요?

by 이재현 [2011.10.19 11:02:15]
죄송합니다 설명이많이 부족한거 같습니다. ㅠ

통계 데이타인데 관리자가 특정 랭크된 데이타값은 픽스를 하고 싶다고 합니다.

그래서 새로 만들어진 데이타는 TAB1 통계 데이타와 TAB2 통계 데이타를 비교해서

픽스 된 값은 그대로 보존하고( TAB2 테이블에 FIXYN = 'Y')

새로 생성된 데이타 통계 데이타 TAB1랭크에 픽스( 고정 )된 순위가 존재하니 그에

해당하는 데이타 TAB1에서 랭크순위가 밀리는 방식입니다.

원하는 데이타는 2 는 TAB1에서 RN = 1 값이고 11는 TAB1에서 9입니다.

어제 오늘 해서 어떻게 풀긴했습니다..( 때려 마춘듯 ㅠ )

랭크( TAB2 테이블에서 1 과 10 )은 그대로

by 이재현 [2011.10.19 11:12:48]
어찌 어찌 해서 풀은 답입니다.

더 좋은 방법이 있나요?? ㅠ

WITH TAB1 AS(
SELECT LEVEL RN FROM DUAL CONNECT BY LEVEL < 20
), TAB2 AS (
SELECT LEVEL RN, DECODE( LEVEL , 1, 'Y', 5, 'Y', 9, 'Y', 'N' ) FIXYN FROM DUAL CONNECT BY LEVEL < 20
)
SELECT A.RN, A.RN+LEAD(CNT, CNT) OVER(ORDER BY A.RN ) RN_R
FROM (
SELECT A.RN, COUNT( CASE WHEN B.FIXYN = 'Y' THEN 1 END ) OVER( ORDER BY A.RN ) CNT
FROM TAB1 A
, TAB2 B
WHERE A.RN = B.RN
) A

by 마농 [2011.10.19 11:34:41]
틀렸네요.
1, 5, 9 가 빠질 때는 맞습니다.
그러나 데이터를 바꿔서 1, 5, 9, 11 을 픽스 시켰을때는 결과가 틀어집니다.
작성하신 방법은 한단계만 체크가 됩니다만
픽스된 자료가 여러단계에 걸쳐서 연결될 경우엔 결과가 틀어지지요.

문제를 풀려면 먼저 마지막 데이터가 어떻게 나오는지가 명확해야 할듯 합니다.
결과를 보면 17, 18, 19 는 순위가 안나오는데요?
안나오는게 맞는건가요? 20, 21, 22 로 나와야 하는건가요?
tab1과 tab2는 결과건수가 19개로 항상 동일한 건가요?

by 이재현 [2011.10.19 11:45:59]
훨 버그가 있군요;; 어쩐지..

현재 데이타값은 20보다 작은거 까지니.. 19까지만 나오면 됩니다.


by 이재현 [2011.10.19 11:56:16]
결과를 보면 17, 18, 19 는 순위가 안나오는데요?

두번재 컬럼에 17 18 19가 존재하니 상관없습니다.

안나오는게 맞는건가요?

현재 데스트 데이타에 RN_R 컬럼에 19까지 존재하니 상관없습니다.

20, 21, 22 로 나와야 하는건가요?

아닙니다. 20이하이니 LEVEL < 20 19까지 나오는게 정상입니다.

tab1과 tab2는 결과건수가 19개로 항상 동일한 건가요?

그때 그때 다릅니다. 통계 데이타라 생성후에 픽스되는값이니.

동일하다고 보싶될것같습니다.



by 마농 [2011.10.19 12:48:33]
WITH tab2 AS
(
SELECT LEVEL rn
, DECODE(LEVEL, 1, 'Y', 5, 'Y', 9, 'Y', 11, 'Y', 'N') fixyn
FROM dual
CONNECT BY LEVEL < 20
)
SELECT ROW_NUMBER() OVER(ORDER BY rn) rn_1
, rn rn_2
FROM tab2
WHERE fixyn = 'N'
;

질문에 있는 결과만 뽑는다면 굳이 tab1이 필요 없네요.
질문상에선 보이지 않는 부분이지만 혹시라도 tab1의 다른 자료도 같이 조회해야 한다면 위결과와 조인하시면 됩니다.

by 이재현 [2011.10.19 14:18:06]
감사합니다 ;;

by 이재현 [2011.10.19 15:48:11]
정말 천재쉽니다.. 대단..+_+
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입