2011-03-31 60 views
0

,我有以下格式的一個簡單的SQL表分組:選擇總和:通過符號

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

以下兩個SQL查詢,我可以選擇值的總和,正值的總和之間的區別和負值的總和。

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 2011-03-31 09:16:20

+0

是的,對不起,正如我所說,我沒有測試。感謝您的更正:) – 2011-03-31 09:37:28

+1

您可以使用'GREATEST(value,0)'和'LEAST(value,0)'代替條件。基本上是一樣的,但有點清潔imo。 – TimE 2015-01-07 23:25:21

2

許多數據庫都有一個符號()函數

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

這有效,但給了我一個正面和負面價值的行。仍然有幫助,我不知道SIGN(..)存在。謝謝。 :) – pruefsumme 2011-03-31 09:11:13

+2

是的,它會產生0的第3行(當然總和爲0) – RichardTheKiwi 2011-03-31 09:12:48