상버
60
2018-08-22 15:19:26 작성 2018-08-22 15:22:36 수정됨
1
511

sql case 문 조건이 동일 할 경우


select

        SUM( case when (A.RCD_TP = 'AA' and STATE = 'Y,Y') OR (A.RCD_TP = 'BB' and STATE = 'Y')

                           then 1 else 0 end) as CNT,

SUM( case when (A.RCD_TP = 'AA' and STATE = 'Y,Y') OR (A.RCD_TP = 'BB' and STATE = 'Y')

                          then A.SIZE else 0 end) as SIZE,

SUM(case when (A.RCD_TP = 'AA' and STATE = 'Y,Y') OR (A.RCD_TP = 'BB' and STATE = 'Y')

                          then A.LENGTH else 0 end) as LENGTH

from test A


위와 같은 쿼리문에서 

CASE 조건문을 1번만 사용할 수 없을까요??


그리고

select SUM(case when ... then SIZE else 0) as sum_size ...

select case when ... then SUM(SIZE) else SUM(0) as sum_size  ...

두 쿼리문의 차이점을 알고싶습니다.

감사합니다.

0
  • 답변 1

  • 랄고
    194
    2018-08-22 15:26:46 작성 2018-08-22 17:12:19 수정됨

    1.

    select COUNT(A.*) as cnt, SUM(A.SIZE) as SIZE, SUM(A.LENGTH) as LENGTH

    from test A

    where (A.RCD_TP = 'AA' and STATE = 'Y,Y') OR (A.RCD_TP = 'BB' and STATE = 'Y')

    로 바꺼질거 같네요.

    안되면 죄송합니다.



    2. 두번째 쿼리는 sum 후 select 의 결과로 출력이라 원하지 않는 결과가 나올 수 있습니다.

    추가> 두번째 쿼리는 통계가 아닌것이 되겠네요. 한행에 대한 sum 은 결국 자신, same same 이기 때문에 통계결과가 아닌 row 행이 쭉 늘어난 테이블이 나올텐데요.


    추가2> 다시 보니 결과값이 같은게 나오겠네요. 결과적으론 같지만 로직상으로 다르게 작동 합니다.

    sum 으로 나온 통계결과의 결과에 대한 case 처리가 일어 납니다.

    현재 경우는 같은결과지만 다른 상황(0 보다 크면 무조껀 1, 0이면 0) 으로 처리해야 되는경우

    다른값이 나옵니다.

  • 로그인을 하시면 답변을 등록할 수 있습니다.