SELECT COUNT(*)
FROM BS_LOT A,
( SELECT * FROM
( SELECT
BDD_ID,
BDD_TYPE,
LOT_MGT_NO,
AMT_MGT_NO,
ROW_NUMBER() OVER( PARTITION BY BDD_ID, BDD_TYPE, LOT_MGT_NO ORDER BY BDD_ID, BDD_TYPE, LOT_MGT_NO) RNK
-- partition by 안에 포함될 그룹을 넣어놓고 order by로 정렬 시키고
-- rnk =1의 값은 각각의 최상위값 오름 차순일땐 가장 높은 값이 들어가 있다..
-- max 함수를 썼을때와 비슷한 효과를 가져온다
FROM BS_AMT A) WHERE RNK=1) B
WHERE A.BDD_ID = B.BDD_ID(+)
AND A.BDD_TYPE = B.BDD_TYPE(+)
AND A.LOT_MGT_NO = B.LOT_MGT_NO(+)
AND A.COFR_YN = 'Y'
AND A.BDD_ID = '00440'
AND A.BDD_TYPE = '0'
AND A.MNT_LOT_YN = DECODE('','','N', '')
AND A.COFR_YN = 'Y'
코드 비교
- row_number 이용한 경우 -
SELECT
count(*)
FROM BS_LOT BL, CM_GVT_BLOCK CGB,
(SELECT * FROM
( SELECT
BDD_ID,
BDD_TYPE,
LOT_MGT_NO,
AMT_MGT_NO,
ROW_NUMBER() OVER( PARTITION BY BDD_ID, BDD_TYPE, LOT_MGT_NO ORDER BY BDD_ID, BDD_TYPE, LOT_MGT_NO) RNK
FROM BS_AMT A) WHERE RNK=1
) BA
WHERE BA.BDD_ID(+) = BL.BDD_ID
AND BA.BDD_TYPE(+) = BL.BDD_TYPE
AND BA.LOT_MGT_NO(+) = BL.LOT_MGT_NO
AND BL.GVT_ID = CGB.GVT_BLOCK_ID
AND BL.SUPPLY_METH != '50'
AND BL.COFR_YN = 'Y'
AND BL.BDD_ID = '00440'
AND BL.BDD_TYPE = '0'
AND BL.MNT_LOT_YN = DECODE('','','N', '')
AND BL.COFR_YN = 'Y'
- max 이용한 경우 -
SELECT
count(*)
FROM BS_LOT BL, CM_GVT_BLOCK CGB,
(SELECT *
FROM BS_AMT BA
WHERE BA.AMT_MGT_NO =(SELECT MAX(AMT_MGT_NO)
FROM BS_AMT
WHERE BDD_ID = BA.BDD_ID
AND BDD_TYPE = BA.BDD_TYPE
AND LOT_MGT_NO =BA.LOT_MGT_NO
)
) BA
WHERE BA.BDD_ID(+) = BL.BDD_ID
AND BA.BDD_TYPE(+) = BL.BDD_TYPE
AND BA.LOT_MGT_NO(+) = BL.LOT_MGT_NO
AND BL.GVT_ID = CGB.GVT_BLOCK_ID
AND BL.SUPPLY_METH != '50'
AND BL.COFR_YN = 'Y'
AND BL.BDD_ID = '00440'
AND BL.BDD_TYPE = '0'
AND BL.MNT_LOT_YN = DECODE('','','N', '')
AND BL.COFR_YN = 'Y'
댓글