2012-03-21 45 views
0
使用聲明

我有以下表格:MySQL的:IF與SUM

Unique | Common | Score 
1  | 1 | 10 
2  | 1 | 10 
3  | 1 | 10 
4  | 1 | -10 

如果我運行此:

SELECT 
    SUM(`score`) AS `total` 
FROM 
    `test` 
GROUP BY 
    `common` 

我得到總:

20 

這是什麼我期望。

我想將負數視爲零,並總計剩餘分數以獲得總數。所以,如果我運行此:

SELECT 
    IF(`score`<0, 0, SUM(`score`)) AS `total` 
FROM 
    `myTable` 
GROUP BY 
    `unique` 

我得到這些總數:

10 
10 
10 
0 

這是我所期待的好。

但是,如果我運行此:

SELECT 
    IF(`score`<0, 0, SUM(`score`)) AS `total` 
FROM 
    `myTable` 
GROUP BY 
    `common` 

我一共拿到:

20 

爲什麼我得到的20,而不是30進行最後的查詢時?唯一的區別是分組。

BTW,除去最後的查詢superflous Group by條款也給出了20

在此先感謝的結果。

+0

因爲它做的10 + 10 + 10 +( - 10),這是20。 – 2012-03-21 12:31:26

回答

3

試試這個

SELECT 
    SUM(`score`) AS `total` 
FROM 
`myTable` WHERE score > 0 
GROUP BY 
`common` 
2

我沒有測試過這一點,但我覺得你有你的IF和圓形總和走錯了路。我想應該是這樣的

SELECT 
    SUM(IF(`score`<0, 0,`score`)) AS `total` 
FROM 
    `myTable` 
GROUP BY 
    `common` 
0

嘗試

SELECT 
    SUM(IF(`score`<0, 0, score)) AS `total` 
FROM 
    `myTable` 
GROUP BY 
    `common`