CUBE 후에 정렬 0 2 3,313

by eunna ROLLUP CUBE GROUPING [2012.04.16 11:12:42]



안녕하세요; 
CUBE 후에 정렬이 마음대로 안되서 질문 드려요;

CUBE로 합계 및 데이터의 갯수들을 COUNT 후에 '전국'을 제외한 
데이터로 STB_TOT의 내림차순으로 ORDER BY를 주고 싶은데; 
전국도 물론 함께 정렬 되네요;

UNION ALL을 쓰려고 하는데
혹시 다른 좋은 방법 있는지 여쭤봅니다.




SELECT CODE
  , (CASE WHEN CODE IS NULL THEN '전국' ELSE MAX(NAME) END) AS NAME
-- '||COLUMN_LIST_LAB||'
  , COUNT(AREA_CODE) AS AREA_TOT
  , COUNT(STB_CODE)  AS STB_TOT
  FROM (
SELECT AREA.AREA_CODE AS CODE
  , AREA.NAME
  , STB.AREA_CODE
  --'||COLUMN_LIST||'
  , STB.STB_CODE
   FROM (SELECT AREA_CODE , NAME
   FROM TBL_AREA
  WHERE PARENT_CODE = 0
    ) AREA
    ,
    (
SELECT ACC_GRP.ACC_GRP_NO
  , STB.AREA_CODE
  , STB.ACC_NO
  , STB.PARENT_ACC_NO
  , STB.STB_CODE
   FROM ( SELECT ACC_NO AS ACC_GRP_NO
   FROM TBL_ACCOUNT
  WHERE TYPE = '03') ACC_GRP
  , (SELECT A.ACC_NO
  , A.PARENT_ACC_NO
  , A.AREA_CODE
  , B.STB_CODE
   FROM TBL_ACCOUNT A
  , TBL_STB  B
  WHERE A.ACC_NO = B.ACC_NO(+)) STB
  WHERE ACC_GRP.ACC_GRP_NO = STB.PARENT_ACC_NO(+)
) STB
    WHERE AREA.AREA_CODE = STB.AREA_CODE(+)
   ) A
  GROUP BY CUBE(CODE)
  ORDER BY COUNT(STB_CODE) DESC
 
by 마농 [2012.04.16 13:09:31]
조인으로 한번에 처리가 가능한것까지도 너무 여러 단계를 밟아서 쿼리하네요.
아우터조인이 필요 없는 부분까지 아우터 조인 하네요.
조회와 무관한 항목들이 많이 보이네요.
area_tot 와 stb_tot 는 같은 값이 나올 것으로 예상되네요.
CUBE 보다는 ROLLUP이 적당해 보입니다.
SELECT area.area_code AS code
     , NVL(area.name, '전국') AS name
     , COUNT(stb.stb_code) AS stb_tot
 FROM tbl_area area
     , (SELECT c.area_code
             , c.stb_code
          FROM tbl_account a
             , tbl_account b
             , tbl_stb c
         WHERE a.type = '03'
           AND a.acc_no = b.parent_acc_no
           AND b.acc_no = c.acc_no
        ) stb
 WHERE area.parent_code = 0
   AND area.area_code = stb.area_code(+)
 GROUP BY ROLLUP((area.area_code, area.name))
 ORDER BY GROUPING(area.area_code), stb_tot DESC
;

by eunna [2012.04.16 13:22:26]
아.. 여러번 조인된건;
이 쿼리가 프로시저의 일부분인 조회쿼리인데
주석부분에 동적쿼리가 들어가고 있어서 그렇게 하게 되었네요 ^^

마농님 말씀대로 하니 정렬 잘되네요 ^^
감사합니다.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입