2012-03-21 42 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`