아주 간단한 쿼리 질문드립니다. 0 5 1,758

by 클라나드 [2014.04.29 12:37:47]


포인트의 사용량과 적립량을 구하고있습니다.

WITH T AS

   ( SELECT 30 FROM DUAL UNION ALL
     SELECT 50 FROM DUAL UNION ALL
     SELECT -10 FROM DUAL UNION ALL
     SELECT -40 FROM DUAL
   )
SELECT *
  FROM T

 

위데이터를 결과값은 

      PT

1    30

2     50

3    -10

4    -40

입니다.

결과 값이

SAVE_PT        USE_PT

1     80                 -50

이렇게 적립합계 사용합계로 나오게 하고싶은데 오랬동안 해메고있습니다...

고수님들의 조언을 부탁드립니다.

by 부쉬맨 [2014.04.29 13:19:58]
WITH T AS
   ( SELECT 30 as a FROM DUAL UNION ALL
     SELECT 50 FROM DUAL UNION ALL
     SELECT -10 FROM DUAL UNION ALL
     SELECT -40 FROM DUAL
   )
SELECT sum(case when instr(a,'-') = 1 then a end) use_pt,
           sum(case when instr(a,'-') = 0 then a end) save_pt
  FROM T

실제로는 차감이냐

적립이냐 라는 구분값으로 나눠줘야될꺼같은데

그구분이 없어서 저런식으로 나눳습니다


by 클라나드 [2014.04.29 13:40:13]

답변 감사합니다


by 마농 [2014.04.29 13:35:48]
-- 1. Case 를 이용한 부분 집계
SELECT SUM(CASE WHEN pt > 0 THEN pt END) save_pt
     , SUM(CASE WHEN pt < 0 THEN pt END)  use_pt
  FROM t
;
-- 2. Greatest, Least 를 응용하여 간결하게
SELECT SUM(GREATEST(pt, 0)) save_pt
     , SUM(   LEAST(pt, 0))  use_pt
  FROM t
;

 


by 클라나드 [2014.04.29 13:40:19]

답변 감사합니다


by 백곰탱이 [2014.05.07 21:27:00]

WITH T AS

   ( SELECT 30 as a FROM DUAL UNION ALL
      SELECT 50 FROM DUAL UNION ALL
      SELECT -10 FROM DUAL UNION ALL
      SELECT -40 FROM DUAL
    )
 SELECT sum(decode(sign(a),1,a)) SAVE_PT,sum(decode(sign(a),-1,a)) USE_PT
   FROM T

==> Sing 함수(양수/음수) 판단하는 함수를 사용하여 만들어 보았습니다

 

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