aegispro님 | 튜닝 | 2013-10-05 02:00:48
테이블 디자인은 아래와 같구요. (밑줄이 primary keys입니다.)
ET_STAT_DTL_TB (ET_NUM, ET_STAT_SEQ_NUM, ET_STAT_TS, ET_STAGE_CD, ET_STAT_CD, ET_RSN_CD, ET_ASGN_USER_ID_NUM)
원하는 결과는 ET_STAGE_CD별로 Count를 얻고 싶어요
카운드 코드
100 01
88 02
99 03
등등등..
(1) SELECT COUNT(ET_STAGE_CD), ET_STAGE_CD
FROM (
SELECT DTL.ET_NUM, DTL.ET_STAGE_CD, DTL.ET_STAT_SEQ_NUM,
ROW_NUMBER() OVER(PARTITION BY DTL.ET_NUM, DTL.ET_STAGE_CD ORDER BY
DTL.ET_STAT_SEQ_NUM DESC) ROWNUM
FROM SCHEMA.ET_STAT_DTL_TB DTL
) X WHERE ROWNUM = 1
GROUP BY ET_STAGE_CD
(2) SELECT
COUNT(STAT.ET_STAT_CD), STAT.ET_STAGE_CD
FROM SCHEMA.ET_STAT_DTL_TB STAT
WHERE STAT.ET_STAT_SEQ_NUM =
(
SELECT
MAX(STAT_TMP.ET_STAT_SEQ_NUM)
FROM NCAPRPRD.ET_STAT_DTL_TB STAT_TMP
WHERE STAT_TMP.ET_NUM = STAT.ET_NUM
)
GROUP BY STAT.ET_STAGE_CD WITH UR
첫번째 질문은
(1)과 (2)중에서 어느쪽이 성능면에서 더 유리한지요 ? 아니면 별 차이가 없는 지요?
두번째 질문은
(1)과 (2)의 결과물이 다르게 나오는 데...(1) 혹은 (2) 쿼리에 어떠 오류가 있는 지 전문가 분들의 의견을 듣고 싶습니다