2011-03-31 3 views
0

로 그룹화 : 다음 두 SQL 쿼리와선택 합 : 나는 간단한 SQL에 다음과 같은 형식의 테이블이 기호

date | value 
============ 
2010-01-01 | -54 
2010-01-02 | 134 
2010-01-03 | 73 

을 나는 값의 합계를 선택하고 양수 값의 합계를 구별 할 수 음수 값의 합

SELECT YEAR(date), SUM(value) FROM table WHERE value > 0 GROUP BY YEAR(date) 

SELECT YEAR(date), SUM(value) FROM table WHERE value < 0 GROUP BY YEAR(date) 

단일 SQL 쿼리에서이 작업을 수행 할 수있는 방법이 있습니까?

미리 감사드립니다.

답변

4

테스트하지 (경우에는 SUM 명령을 내 놓을 수 있는지 알고하지 않습니다)하지만, CASE 명령이 도움이 될 수 있습니다 :

SELECT 
    YEAR(date), 
    SUM(CASE WHEN value > 0 THEN value ELSE 0 END) as positives_sum, 
    SUM(CASE WHEN value < 0 THEN value ELSE 0 END) as negatives_sum 
FROM 
    table 
GROUP BY 
    YEAR(date) 
+0

END와 함께 작동합니다. 감사! – pruefsumme

+0

그래, 미안, 내가 말했듯이, 나는 시험하지 않았다. 수정 해 주셔서 감사합니다 :) –

+1

조건부 대신에'GREATEST (value, 0)'와'LEAST (value, 0)'를 사용할 수 있습니다. 근본적으로 같은. 그러나 조금 더 깨끗한 im. – TimE

2

많은 데이터베이스가 SIGN이() 함수

SELECT YEAR(date), 
     SUM(value) 
    FROM table 
GROUP BY YEAR(date), 
      SIGN(value) 
+0

그게 효과가 있지만 나에게 긍정적이고 부정적인 가치에 대한 별도의 행을 제공합니다. 아직도 도움이되었는데, SIGN (..)이 존재한다는 것을 몰랐습니다. 감사. :) – pruefsumme

+2

예, 0의 3 행을 생성합니다 (0으로 합계). – RichardTheKiwi

관련 문제