중복된 값제거 1 2 1,507

by 곰돌이 [2014.06.13 10:03:16]


번호 결과
1 실패
1 실패
2 성공
3 성공

아래 테이블이 있는데 실패한 번호만 중복없이 데이터를 가져오고 싶은데요..

group by 나 distinct나 소트연산이 일어나잖아요?

더 좋은방법 없을까여

by 비주류 [2014.06.13 10:30:54]

위 테이블 전체 번호를 커버하는 (임시)범위 테이블을 만드시고 그것을 기준으로

EXISTS (위 테이블과 SEMI JOIN) 조건을 걸어보시는 것도 한 방법일 것 같습니다.

-> 성능이 항상 나을거란 보장은 없지만, 번호 범위가 작고, 결과가 엄청 나게 많으면 조금 더 나을 것같다는 생각이 듭니다. (위 테이블에 번호(+결과) 인덱스가 있어 NL SEMI JOIN 가능시)


by 짱아 [2014.06.13 16:41:01]

분석 함수를 사용하면 어떨까요?

with t1 as
( select 1 num,'실패' result from dual union all
select 1 ,'실패' from dual union all
select 2 ,'성공' from dual union all
select 2 ,'성공' from dual union all
select 3 , '실패' from dual union all
select 3 , '실패' from dual)
select *
from (
select row_number() over(partition by num order by result) rn,
       a.*
from t1 a
where result ='실패'
)
where rn=1;

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입