무식한 SQL문 튜닝좀 해주세요.. 0 3 1,815

by 막내 [Oracle 기초] [2010.02.08 16:31:41]


t 테이블에 code 컬럼과 mail 컬럼이 있습니다.

여기서 찾고자 하는 자료는

code그룹 중 mail 컬럼이 모두 비어있는 code를 찾는건데요..

저는 아래와 같은 방법으로 했는데 이렇게 되면 소스 가독성도 떨어지고..

나중에 유지보수할때 손이 갈꺼같아서요.. 함수나 다른 방법으로 깔끔하게 만들 수 있는 방법이 없을까요?

with t as
(
    select 'A001' code, '' mail from dual
    union all
    select 'A001' code, 'a' mail from dual
    union all
    select 'A001' code, '' mail from dual
    union all
    select 'A002' code, 'a' mail from dual
    union all
    select 'A003' code, 'b' mail from dual
    union all
    select 'A003' code, '' mail from dual
    union all
    select 'A004' code, '' mail from dual
    union all
    select 'A004' code, '' mail from dual
    union all
    select 'A004' code, '' mail from dual
    union all
    select 'A004' code, '' mail from dual
    union all
    select 'A005' code, 'a' mail from dual
    union all
    select 'A006' code, '' mail from dual
    union all
    select 'A007' code, '' mail from dual
    union all
    select 'A008' code, '' mail from dual
   
)
select *
from   (select code,
   sum(OK) OK,
   sum(EMPTY ) EMPTY,
   count(*) total
    from   (select code,
   nvl2(mail, 1, 0) ok,
   nvl2(mail, 0, 1) empty
  from   t a  
)
    group by code )
where  EMPTY = TOTAL;
by 마농 [2010.02.08 16:55:18]
SELECT code
FROM t
GROUP BY code
HAVING COUNT(mail) = 0
;

by 마농 [2010.02.08 16:59:53]
HAVING절을 다음과 같이 바꿔도 되죠.
HAVING MIN(mail) IS NULL
HAVING MAX(mail) IS NULL

by 막내 [2010.02.08 17:00:36]
역시 방법이 있었군요!

감사합니다!

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