[재질문]필드별 데이터 크기 비교정렬 방법 어떻게?? 0 1 3,343

by 허브 [2008.10.23 11:41:49]


2.bmp (680,510Bytes)

첨부한 그림이 제 질문을 이해하기 쉽게할텐데요

먼저 마농님 감사합니다.

필드끼리 데이터를 비교해서 큰 데이터를 가지고잇는 필드순으로 정열을시려는데

행번호를 사용해서 오름차순으로 하면 한 필드내에서만 데이터를 비교하는데

가로행 데이터들을 세로열로  바꿔서 오름차순으로 바꾼다음에 원래 행으로 데이터들을

보내주면서 필드들도 데이터에 맞게 자리를 찾아가는 그런걸로 생각해봣는데 비슷할지 모르겟네요 이런방법을 사용해서 순위를 매기는건지요?

색깔별로 구분해봣는데 한번 각 색깔별로 어떤 역할들을 하고있는지 고수님들 한수 부탁드립니다.ㅠ;

부분별로 나눠서 돌려봣는데 결과를보면 한 필드내 세로끼리 비교를 하네요..

SELECT TD_OA, TD_OB, TD_OC,TD_OD,TD_OE,TD_OF,TD_OG,TD_OH,TD_OI,
TD_AO,TD_AA,TD_AB,TD_AC,TD_AD,TD_AE,TD_AF,TD_AG,TD_AH,TD_AI,TD_BO,TD_BA,TD_BB,TD_BC,TD_BD
, MIN(DECODE(RN,1,MAX1)) TD, MIN(DECODE(RN,2,MAX1)) TD, MIN(DECODE(RN,3,MAX1)) TD, MIN(DECODE(RN,4,MAX1)) TD, MIN(DECODE(RN,5,MAX1)) TD, MIN(DECODE(RN,6,MAX1)) TD
, MIN(DECODE(RN,7,MAX1)) TD, MIN(DECODE(RN,8,MAX1)) TD, MIN(DECODE(RN,9,MAX1)) TD, MIN(DECODE(RN,10,MAX1)) TD, MIN(DECODE(RN,11,MAX1)) TD, MIN(DECODE(RN,12,MAX1)) TD
, MIN(DECODE(RN,13,MAX1)) TD, MIN(DECODE(RN,14,MAX1)) TD, MIN(DECODE(RN,15,MAX1)) TD, MIN(DECODE(RN,16,MAX1)) TD, MIN(DECODE(RN,17,MAX1)) TD, MIN(DECODE(RN,18,MAX1)) TD
, MIN(DECODE(RN,19,MAX1)) TD, MIN(DECODE(RN,20,MAX1)) TD, MIN(DECODE(RN,21,MAX1)) TD, MIN(DECODE(RN,22,MAX1)) TD, MIN(DECODE(RN,23,MAX1)) TD, MIN(DECODE(RN,24,MAX1)) TD
FROM

    (
        SELECT TD_OA, TD_OB, TD_OC,TD_OD,TD_OE,TD_OF,TD_OG,TD_OH,TD_OI,TD_AO,
               TD_AA,TD_AB,TD_AC,TD_AD,TD_AE,TD_AF,TD_AG,TD_AH,TD_AI,TD_BO,TD_BA,TD_BB,TD_BC,TD_BD,
        DECODE(lv,1,TD_oa,lv,2,TD_ob,lv,3,TD_oc,lv,4,TD_od,lv,5,TD_oe,lv,6,TD_of
               ,lv,7,TD_og,lv,8,TD_oh,lv,9,TD_oi,lv,10,TD_ao,lv,11,TD_aa,lv,12,TD_ab
               ,lv,13,TD_ac,lv,14,TD_ad,lv,15,TD_ae,lv,16,TD_af,lv,17,TD_ag,lv,18,TD_ah
               ,lv,19,TD_ai,lv,20,TD_bo,lv,21,TD_ba,lv,22,TD_bb,lv,23,TD_bc,lv,24,TD_bd) MAX1,
          
        ROW_NUMBER() OVER(PARTITION BY TD_OA, TD_OB, TD_OC,TD_OE,TD_OF,TD_OG,TD_OH,TD_OI,TD_AO,
                   TD_AA,TD_AB,TD_AC,TD_AD,TD_AE,TD_AF,TD_AG,TD_AH,TD_AI,TD_BO,TD_BA,TD_BB,TD_BC,TD_BD
                   ORDER BY DECODE(lv,1,TD_oa,lv,2,TD_ob,lv,3,TD_oc,lv,4,TD_od,lv,5,TD_oe,lv,6,TD_of
                   ,lv,7,TD_og,lv,8,TD_oh,lv,9,TD_oi,lv,10,TD_ao,lv,11,TD_aa,lv,12,TD_ab
                   ,lv,13,TD_ac,lv,14,TD_ad,lv,15,TD_ae,lv,16,TD_af,lv,17,TD_ag,lv,18,TD_ah
                   ,lv,19,TD_ai,lv,20,TD_bo,lv,21,TD_ba,lv,22,TD_bb,lv,23,TD_bc,lv,24,TD_bd) DESC) RN
    FROM (select
 Round(AVG(SUM(TD_OA)))TD_OA, Round(AVG(SUM(TD_OB)))TD_OB, Round(AVG(SUM(TD_OC)))TD_OC,
 Round(AVG(SUM(TD_OD)))TD_OD, Round(AVG(SUM(TD_OE)))TD_OE, Round(AVG(SUM(TD_OF)))TD_OF,
 Round(AVG(SUM(TD_OG)))TD_OG, Round(AVG(SUM(TD_OH)))TD_OH, Round(AVG(SUM(TD_OI)))TD_OI,
 Round(AVG(SUM(TD_AO)))TD_AO, Round(AVG(SUM(TD_AA)))TD_AA, Round(AVG(SUM(TD_AB)))TD_AB,
 Round(AVG(SUM(TD_AC)))TD_AC, Round(AVG(SUM(TD_AD)))TD_AD, Round(AVG(SUM(TD_AE)))TD_AE,
 Round(AVG(SUM(TD_AF)))TD_AF, Round(AVG(SUM(TD_AG)))TD_AG, Round(AVG(SUM(TD_AH)))TD_AH,
 Round(AVG(SUM(TD_AI)))TD_AI, Round(AVG(SUM(TD_BO)))TD_BO, Round(AVG(SUM(TD_BA)))TD_BA,
 Round(AVG(SUM(TD_BB)))TD_BB, Round(AVG(SUM(TD_BC)))TD_BC, Round(AVG(SUM(TD_BD)))TD_BD
 from system.ACCTEST_DS
 WHERE YYYYMMDT in to_char(to_date('20071225','yyyymmdd')-(7*1), 'yyyymmdd')
 or YYYYMMDT in to_char(to_date('20071225','yyyymmdd')-(7*2), 'yyyymmdd')
 or YYYYMMDT in to_char(to_date('20071225','yyyymmdd')-(7*3), 'yyyymmdd')
group by yyyymmdt)
 
    ,(SELECT LEVEL lv FROM dual CONNECT BY LEVEL <=1))
group by YYYYMMDT,TD_OA,TD_OB,TD_OC,TD_OD,TD_OE,TD_OF,TD_OG,TD_OH,TD_OI,TD_AO,
 TD_AA,TD_AB,TD_AC,TD_AD,TD_AE,TD_AF,TD_AG,TD_AH,TD_AI,TD_BO,TD_BA,TD_BB,TD_BC,TD_BD;

by 마농 [2008.10.24 10:33:39]
쿼리를 보니 제가 알려드린 방법을 제대로 이해하지 못하셨네요.
그림을 또 보니 제가 알려드린 3단계 방법중 2단계까지만 수행하면 되는 간단한 문제였네요.
3단계가 가장 복잡한데 필요없는 과정이었네요.
SELECT RANK() OVER(ORDER BY value DESC) rk
, code
, value
FROM
(
SELECT DECODE(lv1,1,'TD_OA',2,'TD_OB',3,'TD_OC',...) code
, DECODE(lv1,1,td_oa,2,td_ob,3,td_oc,...) value
FROM
(
SELECT
ROUND(AVG(SUM(td_oa))) td_oa,
ROUND(AVG(SUM(td_ob))) td_ob,
ROUND(AVG(SUM(td_oc))) td_oc,
...
FROM system.acctest_ds
WHERE YYYYMMDT IN
( to_char(to_date('20071225','yyyymmdd')-(7*1), 'yyyymmdd')
, YYYYMMDT in to_char(to_date('20071225','yyyymmdd')-(7*2), 'yyyymmdd')
, YYYYMMDT in to_char(to_date('20071225','yyyymmdd')-(7*3), 'yyyymmdd')
)
GROUP BY yyyymmdt
)
, (SELECT LEVEL lv FROM dual CONNECT BY LEVEL <=24)
)
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입